[NodeJS]NodeJS基于WebSocket的多用户点对点即时通讯聊天

最近给一个客户做了一个聊天,所以就用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,可以看我前面的博客,当然也可以直接自己写

posted @ 2018-04-24 15:20  leeli73  阅读(3886)  评论(0编辑  收藏  举报