WebSocket
WebSocket是一個協議,它是是基於TCP的一種新的網絡協議,TCP協議是一種持續性的協議,和HTTP不同的是,它可以在服務器端主動向客戶端推送消息。通過這個協議,可以在建立一個nodejs的服務器,然后所有的客戶端都可以向服務器端發送消息,然后服務器端把這個消息廣播出去,形成了一個類似於聊天室的東西。
客戶端:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <title>websoket</title> 6 </head> 7 <body> 8 <h1>chat room</h1> 9 <input type="text" id="msg" /> 10 <button id="send">發送</button> 11 <script type="text/javascript"> 12 var websocket = new WebSocket("ws://localhost:6666/"); 13 14 function showMsg(str){ 15 var div = document.createElement('div'); 16 div.innerHTML = str; 17 document.body.appendChild(div) 18 } 19 20 websocket.onopen=function(){ 21 console.log("open"); 22 document.getElementById('send').onclick = function() { 23 var txt = document.getElementById('msg').value; 24 if (txt) { 25 websocket.send(txt); 26 } 27 } 28 } 29 websocket.onclose = function() { 30 console.log("close"); 31 } 32 websocket.onmessage = function(e) { 33 console.log(e.data); 34 showMsg(e.data); 35 } 36 </script> 37 </body> 38 </html>
從我的服務器localhost:6666實例化一個新的websocket,然后打開他監聽發送按鈕,點擊發送就把txt發送到服務器端,然后監聽得到的消息,通過showMsg渲染到界面上去
服務器端(node.js):
1 var ws = require("nodejs-websocket") 2 3 var port = 6666; 4 5 var clientCount = 0; 6 7 var server = ws.createServer(function (conn) { 8 console.log("New connection") 9 clientCount++ 10 conn.nickname = "user" + clientCount 11 broadcast("******* "+conn.nickname + " comes in *******"); 12 13 14 conn.on("text", function (str) { 15 console.log("Received "+str) 16 broadcast(conn.nickname + " say: " + str) 17 }) 18 19 20 conn.on("close", function (code, reason) { 21 broadcast("******* " + conn.nickname + " left *******"); 22 }) 23 conn.on("error", function(err) { 24 console.log("error: "+err); 25 }) 26 }).listen(port) 27 28 console.log("websocket server listening on " + port); 29 30 function broadcast (str) { 31 server.connections.forEach(function (connection) { 32 connection.sendText(str) 33 }) 34 }
之前要加載一下nodejs-websocket模塊,來一個人就把計數器加1,然后給他設置名字,監聽收到的消息text,有消息就執行broadcast,broadcast就是向所有的客戶端廣播新的消息
舉個例子
這里是我服務器上的栗子,大家可以看看
http://www.xiedashuaige.cn/websocket.html
