node.js项目-创建websocket模块

前言

  • node.js是没有提供内置的websocket模块,下载第三方包ws模块来完成
  • 注意的是这个模块好像在断开连接这一块是有点问题,需要自己补充代码
  • 通过内置url模块解决路径参数-逻辑代码解决断开连接问题-方便扩展业务需求
  • 可以不用-但不能没有这些

代码实现

1.下包

javascript 复制代码
npm install ws

2.参考代码

javascript 复制代码
// 第三方包ws
const WebSocket = require("ws");

// 内置url模块-处理websocket路径参数
const url = require("url");

// 注释
// 前端使用-参考主页文章uni-app使用websocket
// sendMessage方法是前端的
// userType代表类型(5-断开连接/1-发送消息等等-自定义)
// 断开连接数据格式
// sendMessage(JSON.stringify({
//   userType:'5',
//   moblieType:'用户id'
// }))


// 创建WebSocket服务器,监听端口9000
const wss = new WebSocket.Server({ port: 9000 });

// 假设ip是 - 192.168.2.22
// 此时websocket前端连接地址就是
// ws://101.43.100.203:3010:9000?userId=用户id


// 存储所有连接
// 方便断开连接
var connections = new Set();

wss.on("connection", function connection(ws, req) {

  // 使用url模块-接收前端发来的userId(路径参数)
  const parameters = url.parse(req.url, true).query;
  const userId = parameters.userId;
  
  // 用户id+ws实例存入
  connections.add({
    id: userId,
    Instantiation: ws,
  });


  // 请求头信息-如果是uni-app(APP端-传递header-可以打印)- 参考uni-app文档websocket
  // console.log("请求头信息", req.headers);

  console.log("客户端连接成功!");

  // 接收来自客户端的消息
  ws.on("message", function incoming(getMessage) {
    console.log("客户端: %s", JSON.parse(getMessage));
    
    // 传递字符串文字-自取
    // console.log("客户端: %s", getMessage);
    // const clientMsg = Buffer.from(getMessage.msg, "hex");

    let data = JSON.parse(getMessage);

    // 断开websocket连接-参考上方注释数据格式
    if (data.userType == 5) {
      console.log("用户id-断开连接", userId);

      for (const connection of connections) {
        if (connection.id == data.moblieType) {
          
          // 关闭删除连接池某个websocket连接
          connection.Instantiation.close();
          connections.delete(connection);
        }
      }

      return;
    }
  });
});

总结:

经过这一趟流程下来相信你也对 node.js项目-创建websocket模块 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

有什么不足的地方请大家指出谢谢 -- 風过无痕

相关推荐
聊天QQ:2769988514 分钟前
基于线性自抗扰(LADRC)的无人船航向控制系统Simulink/Matlab仿真工程探索
node.js
老蒋新思维37 分钟前
创客匠人 2025 万人峰会核心:AI 驱动知识产品变现革新
大数据·人工智能·网络协议·tcp/ip·创始人ip·创客匠人·知识变现
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ42 分钟前
aspect实现请求校验,但是WebSocket 端点类不能被 AOP 代理解决方案
网络·websocket·网络协议
老蒋新思维2 小时前
创客匠人峰会新视角:AI 时代知识变现的 “组织化转型”—— 从个人 IP 到 “AI+IP” 组织的增长革命
大数据·人工智能·网络协议·tcp/ip·创始人ip·创客匠人·知识变现
Arwen3033 小时前
等保2.0三级认证内网IP SM2 SSL证书
网络协议·tcp/ip·ssl
科技块儿4 小时前
【方法】IP66.net:如何查到自己的IP?
网络·网络协议·tcp/ip
北京耐用通信6 小时前
调试复杂、适配难?耐达讯自动化Ethercat转Devicenet让继电器通讯少走弯路
人工智能·物联网·网络协议·自动化·信息与通信
不会写DN6 小时前
JavaScript call、apply、bind 方法解析
开发语言·前端·javascript·node.js
lx188548698967 小时前
HTTPS总结
服务器·网络协议·https
Tiam-20167 小时前
安装NVM管理多版本node
vue.js·前端框架·node.js·html·es6·angular.js