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

nodejs后端ws与http结合共享一个服务器,前端websocket发送信息后端ws接收信息,使用Map定型数组设置ID

//服务端代码

const http=require('node:http');
const WebSocket=require('ws');

const server=http.createServer();
//创建websocket服务
const wss=new WebSocket.WebSocketServer({server});
//创建定型数组
const clients=new Map();

wss.on('connection',(ws)=>{
//设置ws的ID
    clients.set(ws,{id:Date.now()});
    //console.log('连接对象:',ws);
    ws.on('message',(message)=>{
        console.log(`接收到客户端信息:${clients.get(ws).id}:${message}`);
        //循环出clients中的ws对象,即客户端发送的信息对象
        for(let client of clients.keys())
        {
            if(client ===ws)
            {
                client.send(message.toString());
            }
        }
    });

    ws.on('close',()=>{
        
        console.log(`客户端${clients.get(ws).id}断开连接`);
        clients.delete(ws);
    });


});

server.listen(3000,'localhost',()=>{
    console.log('server is running on http://localhost:3000');
})

//客户端代码

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html charset=utf-8"/>
        <title>websocket信息传递</title>
    </head>
    <body>
        <div id="msg">
            <input type="text" name="message" id="message" maxlength="33">
            <button id="sendbtn">发送</button>
        </div>
        
        <script type="text/javascript">
            const ws=new WebSocket('ws://localhost:3000');
            ws.onopen=function(){
                console.log('服务端已经连接');
            }
            ws.onmessage=function(event)
            {
                
                console.log(`接收到服务器的信息:${event.data}`);
            }
            ws.onclose=function(){
                console.log('服务器连接已断开');
            }
            

            const sendMsg=function(){
                const msg=document.getElementById('message').value;
                ws.send(msg);
                document.getElementById('message').value='';
            };
            document.getElementById('sendbtn').addEventListener('click',sendMsg);
        </script>
    </body>
</html>

http://www.kler.cn/a/505023.html

相关文章:

  • 代码随想录算法训练营第十二天|第18题. 四数之和
  • Stream流
  • Qt中容器 QVector、QList、QSet和QMap 性能与用途比较
  • C++并发编程之std::async的异常安全性
  • sql_实用查询语句模版
  • java导出pdf文件
  • rust调用DLL或lib
  • Redis 缓存穿透、击穿、雪崩 的区别与解决方案
  • 微软组建新内部 AI 研发组织:开启智能创新新篇章
  • GPT-SoVITS学习01
  • UDP、TCP特性
  • CasaOS小主机如何部署1Panel面板并实现远程管理服务器超实用教程
  • ubuntu 配置OpenOCD与RT-RT-thread环境的记录
  • 海康大数据面试题及参考答案
  • 【后端面试总结】Golang可能的内存泄漏场景及应对策略
  • Hessian矩阵 通过符号计算解析 Hessian 矩阵
  • 手机与平板:勒索软件的“天然通道”
  • 实时洞察、智能运营——新技术重塑企业绩效管理应用(上)
  • NLP自然语言处理分词模块PaddleNLP
  • 【赛博保安】安全Web日记文件下载漏洞逻辑越权漏洞密码爆破WebGoat靶场(四)
  • Android15源码编译问题处理
  • 阿里云数据传输服务使用场景
  • ASP.NET Core 多环境配置
  • python函数调用
  • C++实现设计模式---抽象工厂模式 (Abstract Factory)
  • CVPR 2024 自动驾驶方向总汇