Saya telah mempelajari HTML5 baru-baru ini dan membuat permainan kanvas, saya mendapati bahawa selain kanvas, alat yang berkuasa dalam HTML5, terdapat juga WebSocket, yang juga patut diberi perhatian. Ia boleh digunakan untuk membuat permainan interaktif dwi skrin Apakah permainan interaktif dwi skrin? Ia adalah untuk mengawal permainan web PC melalui peranti mudah alih. Dalam kes ini, komunikasi masa nyata akan digunakan, dan WebSocket sudah pasti yang paling sesuai. WebSocket mempunyai banyak kelebihan berbanding HTTP Sebab utama ialah WebSocket hanya mewujudkan sambungan TCP dan secara aktif boleh menolak data kepada pelanggan. Ia juga mempunyai pengepala protokol yang lebih ringan untuk mengurangkan jumlah penghantaran data. Oleh itu, WebSocket ialah protokol terbaik untuk komunikasi masa nyata buat masa ini.
Bagi pilihan bahasa pelayan, nodeJs, pertama sekali, kerana saya bekerja pada bahagian hadapan dan sudah biasa dengan javascript Berbanding dengan bahasa bahagian belakang yang lain, saya secara semula jadi lebih suka nodeJs. Kedua, NodeJs sendiri sangat mahir berinteraksi dengan sebilangan besar pelanggan kerana pendekatannya yang didorong oleh peristiwa mengekalkan sambungan konkurensi tinggi. Jadi saya memilih NodeJs.
Pelaksanaan pelayan adalah sangat mudah mula-mula pasang modul nodeJs yang dipanggil nodejs-websocket Taip terus dalam baris arahan nodeJs: npm install nodejs-websocket dan tekan Enter untuk memasangnya . , kerana modul nodejs-websocket, kita tidak perlu melakukan banyak kerja sendiri, kita hanya boleh memanggil kaedah terkapsul orang lain secara terus:
[Kod pelayan], tentukan yang mana satu permainan1 dan yang mana satu permainan2 berdasarkan mesej daripada pelanggan, dan simpan objek sambungan.
var ws = require("nodejs-websocket"); console.log("开始建立连接...") var game1 = null,game2 = null , game1Ready = false , game2Ready = false; var server = ws.createServer(function(conn){ conn.on("text", function (str) { console.log("收到的信息为:"+str) if(str==="game1"){ game1 = conn; game1Ready = true; conn.sendText("success"); } if(str==="game2"){ game2 = conn; game2Ready = true; } if(game1Ready&&game2Ready){ game2.sendText(str); } conn.sendText(str) }) conn.on("close", function (code, reason) { console.log("关闭连接") }); conn.on("error", function (code, reason) { console.log("异常关闭") }); }).listen(8001) console.log("WebSocket建立完毕")
[kod permainan1]: Dapatkan kandungan tiga kotak dengan mengklik dan memindahkannya ke pelayan
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .kuang{text-align: center;margin-top:200px;} #mess{text-align: center} .value{width: 200px;height:200px;border:1px solid;text-align: center;line-height: 200px;display: inline-block;} </style> </head> <body> <div id="mess">正在连接...</div> <div class="kuang"> <div class="value" id="value1">小明小明</div> <div class="value" id="value2">大胸大胸</div> <div class="value" id="value3">小张小张</div> </div> <script> var mess = document.getElementById("mess"); if(window.WebSocket){ var ws = new WebSocket('ws://192.168.17.80:8001'); ws.onopen = function(e){ console.log("连接服务器成功"); ws.send("game1"); } ws.onclose = function(e){ console.log("服务器关闭"); } ws.onerror = function(){ console.log("连接出错"); } ws.onmessage = function(e){ mess.innerHTML = "连接成功" document.querySelector(".kuang").onclick = function(e){ var time = new Date(); ws.send(time + " game1点击了“" + e.target.innerHTML+"”"); } } } </script> </body> </html>
[kod permainan2]: Dapatkan mesej yang ditolak oleh perkhidmatan dan paparan
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .kuang{text-align: center;margin-top:200px;} #mess{text-align: center} </style> </head> <body> <div id="mess"></div> <script> var mess = document.getElementById("mess"); if(window.WebSocket){ var ws = new WebSocket('ws://192.168.17.80:8001'); ws.onopen = function(e){ console.log("连接服务器成功"); ws.send("game2"); } ws.onclose = function(e){ console.log("服务器关闭"); } ws.onerror = function(){ console.log("连接出错"); } ws.onmessage = function(e){ var time = new Date(); mess.innerHTML+=time+"的消息:"+e.data+"<br>" } } </script> </body> </html>
Tangkapan skrin sedang berjalan:
Kod ini sangat mudah: ia mudah difahami, dan panggilan nodejs-WebSocket juga sangat ringkas dan jelas Untuk API nodejs-websocket, anda boleh melihat https://www. npmjs.org/package/nodejs-websocket, terdapat pengenalan di dalamnya. Ia akan menjadi sangat mudah untuk mengujinya sendiri Pelaksanaan klien juga boleh dicapai melalui beberapa kaedah seperti onopen dan onmessage.
ps: kekurangan nodejs
1. nodej dikemas kini dengan sangat cepat dan mungkin terdapat keserasian versi
2. Nodejs belum matang dan belum mempunyai pengeluaran besar.
3. Tidak seperti pelayan lain, nodejs tidak menyokong operasi proses dan benang untuk sambungan yang berbeza.
Semasa menimbang pembangunan lancar yang tidak terhingga yang dibawa oleh Nodejs kepada kami, kami mesti mengambil kira ketidakmatangannya, terutamanya untuk aplikasi komunikasi rangkaian "sambungan panjang".