1. 程式人生 > >[NodeJS]NodeJS基於WebSocket的多用戶點對點即時通訊聊天

[NodeJS]NodeJS基於WebSocket的多用戶點對點即時通訊聊天

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的多用戶點對點即時通訊聊天