当前位置: 首页 > news >正文

[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,可以看我前面的博客,当然也可以直接自己写

转载于:https://www.cnblogs.com/lee-li/p/8930902.html

相关文章:

  • Cpython 解释器下实现并发编程
  • 6、高级的数组的复制(test4.java)
  • JQuery mouseover mouseout mouseenter mouseleave 的区别
  • Nginx安装以及配置
  • 在使用mybatis中指定字段查询
  • 上海高校金马五校赛 J - 小Y写文章
  • C#求百分比
  • 用python写一个类似于linux中的tree
  • JS去掉字符串前后空格或去掉所有空格的用法
  • C#预处理器指令
  • find中的-exec参数
  • 再次解决 尝试加载 Oracle 客户端库时引发 BadImageFormatException
  • 学习笔记——悬线法
  • 8.dockerfile之CMD指令
  • Mysql Programming CS 155P笔记(七) Dynamic SQL
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【技术性】Search知识
  • 【剑指offer】让抽象问题具体化
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Apache Pulsar 2.1 重磅发布
  • JavaScript中的对象个人分享
  • Laravel核心解读--Facades
  • Puppeteer:浏览器控制器
  • Python十分钟制作属于你自己的个性logo
  • 动态规划入门(以爬楼梯为例)
  • 给第三方使用接口的 URL 签名实现
  • 计算机常识 - 收藏集 - 掘金
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 聊一聊前端的监控
  • 如何设计一个比特币钱包服务
  • 设计模式(12)迭代器模式(讲解+应用)
  • 消息队列系列二(IOT中消息队列的应用)
  • 栈实现走出迷宫(C++)
  • 白色的风信子
  • Hibernate主键生成策略及选择
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #1015 : KMP算法
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #Lua:Lua调用C++生成的DLL库
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (11)MSP430F5529 定时器B
  • (20050108)又读《平凡的世界》
  • (2022 CVPR) Unbiased Teacher v2
  • (30)数组元素和与数字和的绝对差
  • (function(){})()的分步解析
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • ./configure,make,make install的作用(转)
  • .cn根服务器被攻击之后
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net流程开发平台的一些难点(1)