通過WebSocket實現一個簡單的聊天室功能


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM