[NodeJS]NodeJS基於WebSocket的多用戶點對點即時通訊聊天
阿新 • • 發佈:2018-04-24
round serve i++ conn console 即時通訊 .get () str
最近給一個客戶做了一個聊天,所以就用NodeJS做了一個
原理就是用戶第一次進入後,記錄它的ID和該用戶的ws
等有人發數據的時候,就去查ID,然後找到ID對應的ws,進行消息發送
核心就是用數組做了一個類似python字典的東西
var WebSocketServer = require(‘ws‘).Server, wss = new WebSocketServer({ port: 8888 }); var AllUserData = new Array(); wss.on(‘connection‘, function (ws) { console.log(‘client connected‘); ws.on(‘message‘, function (message) { console.log(message); Temp = JSON.parse(message); if(CheckIsNew(Temp)) { AllUserData.push({ ‘id‘:Temp.ID, ‘ws‘:ws } ); console.log(AllUserData); }else { for(var i=0;i<AllUserData.length;i++) { if(Temp.ID == AllUserData[i][‘id‘]) { if(Temp.Data != "userregister") { AllUserData[i][‘ws‘].send(Temp.ID+Temp.Data);break; } } } } }); }); function CheckIsNew(Temp) { for(var i=0;i<AllUserData.length;i++) { if(Temp.ID == AllUserData[i][‘id‘]) { return false; } } return true; }
下面是一個簡單的連接Demo
<html> <head> <title>GetData</title> </head> <body> <textarea cols=40 rows=20 id="output"></textarea> <button width=200 height=200 onclick="Sent(2,111)">Sent1</button> <button width=200 heigh=200 onclick="Sent(1,222)">Sent2</button> </body> <script src="https://www.gstatic.com/firebasejs/4.13.0/firebase.js"></script> <script src="websocket.js"></script> <script> var s= new MyWebSocket(success,fial,getmes); s.OPen("ws://127.0.0.1:8888"); register(1); register(2); function Sent(friendid,Data) { var Json = { ‘ID‘:friendid, ‘Data‘:Data }; s.Sent(JSON.stringify(Json)); } function register(id) { var Json = { ‘ID‘:id, ‘Data‘:"userregister" }; s.Sent(JSON.stringify(Json)); } function start() { } function success() { document.getElementById("output").value = "success"; } function fial(a) { } function getmes(a) { document.getElementById("output").value = a; } </script> </html>
裏面用到的websocket.js,可以看我前面的博客,當然也可以直接自己寫
[NodeJS]NodeJS基於WebSocket的多用戶點對點即時通訊聊天