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

Posted leeli73

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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,可以看我前面的博客,当然也可以直接自己写

以上是关于[NodeJS]NodeJS基于WebSocket的多用户点对点即时通讯聊天的主要内容,如果未能解决你的问题,请参考以下文章

基于 WebSocket 服务器的 NodeJS XMPP

nodejs-websocket+ssl证书

WebSocket 学习--用nodejs搭建服务器

EADDRINUSE 错误,用于在不同路径上打开 websocket 但在 nodejs 中的相同端口

nodejs+webSocket

如何在NodeJS中代理websocket连接到其他websockets