zoukankan      html  css  js  c++  java
  • [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,可以看我前面的博客,当然也可以直接自己写

  • 相关阅读:
    无废话设计模式(7)结构型模式--装饰模式
    无废话设计模式(6) 结构型模式--适配器模式
    无废话设计模式(5)结构型模式--桥接模式
    无废话设计模式(4)原型模式
    Java进阶--Map集合
    Java进阶--List接口
    Java进阶--集合泛型综合应用案例(斗地主)
    Java进阶--泛型
    Java进阶--Iterator迭代器
    Java进阶--Collection集合
  • 原文地址:https://www.cnblogs.com/lee-li/p/8930902.html
Copyright © 2011-2022 走看看