HTML5 - 開發一個自己的websocket服務器


應用:node.js

 

主要步驟

  • 創建文件夾
  • 創建server.js(服務入口,server為自定義文件的命名)
  • npm init -y (快速創建一個package.json文件
  • 依賴包安裝:nodejs-websocket (github安裝講解)
    • npm i nodejs-websocket
  • 依賴包在appjs中的使用 (github how to use講解)

https://github.com/sitegui/nodejs-websocket#how-to-use-it

 

配置完畢后啟動

命令行輸入>   node server.js (server這個名字不固定具體看你的文件名叫啥

 

服務端server.js 源碼如下:

 1 const ws = require('nodejs-websocket');//引入依賴包
 2   const POST = 8080;//定義端口
 3 // 創建一個server
 4   const server = ws.createServer(connect => {
 5     //每次只要有新的用戶加入,就會為當前用戶創建一個connect對象,同時調用一下這個回調函數。
 6     console.log("New connection");
 7     
 8     // text事件:接收用戶請求,得到用戶傳輸進來的數據。
 9     connect.on("text", data => {
10       // 每當接受到用戶請求事件,這個回調函數就會被觸發。
11       console.log("Received "+data);
12       
13       // sendText/send 方法:接受到請求后,響應一個數據給用戶。因為是connect調用,所以只給當前connet對應的用戶發送,如果需要給所有用戶發送(廣播),需要connections這個數組
14       connect.sendText(data.toUpperCase()+"!!!");//如果直接返回一個data,就會像echo那個服務器一樣的功能,接收到什么就返回什么
15     });
16     
17     // 連接斷開 觸發close事件
18     connect.on("close", (code, reason) => {
19       console.log("connection closed");
20       code && console.log(code);
21       reason && console.log(reason);
22     });
23     
24     // error:監聽服務異常事件,放置因報錯而斷掉整個服務。
25     connect.on('error', ()=>{
26       // 如果觸發了close事件,就會走error異常事件(刷新也會),所以必須加error
27       console.log('連接出現異常');
28     });
29   });
30 server.listen(POST, ()=>{
31     console.log('webSocket服務啟動成功了,監聽了端口'+ POST);
32 });

 

客戶端demo使用上述配置的服務器。 源碼如下:

示例頁面代碼html:

1   <div class="demo">
2     <input type="text" placeholder="請輸入要發送的內容" id="ipt">
3     <button id="btn">發送請求</button>
4     <p>
5       響應結果如下:
6     </p>
7     <div id="rst"></div>
8     <button id="closeBtn">斷開連接</button>
9   </div>

示例頁面代碼js:

 1 // var websocket = new WebSocket('ws://echo.websocket.org');// 使用ws官方提供的服務器
 2 var websocket = new WebSocket('ws://localhost:8080'); // 使用我自己配置的服務器,前提要去websocketServer文件夾中把服務啟動一下:node server.js
 3 websocket.addEventListener('open', function (e) {
 4     console.log(e, websocket.readyState);
 5     // websocket.send('發送一個方法')
 6     // websocket.send('xing.org1^')
 7     btn.onclick = function (a) {
 8       // console.log(a)
 9       websocket.send(ipt.value);
10     }
11   });
12 // 接收返回值:
13   websocket.addEventListener('message', (e) => {
14     console.log(e);
15     rst.innerHTML = e.data;
16   });
17 closeBtn.onclick = function (e) {
18     console.log(e);
19     websocket.close(3000,'主動請求斷開連接吧');//斷開連接
20   }
21   websocket.addEventListener('close', function (e) {
22     console.log('連接斷開了', e);
23   }); 

 

 

connections實現聊天室廣播:

即給所有的用戶(server.connections)都發送消息(sendText):

function broadcast(server, msg) {// 廣播函數

  server.connections.forEach(function (conn) {
    conn.sendText(msg)

  })

}

 

 

具體實現方案,見下篇:《websocket的應用 - 實現一個簡易的聊天室效果。》

 

 


免責聲明!

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



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