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模块 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

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

相关推荐
flash俊杰3 小时前
Electron 打包后窗口 30 秒不出现:一个 ABI 不匹配的血案
electron·node.js
@tangguo1235 小时前
npm 和 yarn 配置说明
前端·javascript·npm·node.js·yarn
flash俊杰7 小时前
一套代码接入所有大模型:OpenAI 兼容适配器设计
node.js·openai
右耳朵猫AI7 小时前
Node.js周刊2026W38 | 进程中断缺陷修复、Copilot 迁至 Rust、Node 新增 VFS
javascript·后端·node.js
K成长日志8 小时前
DALI协议-Part209-颜色控制
物联网·网络协议·iot·智能照明·智能建筑·dali
IPdodo_18 小时前
跨境 API 调用不稳定怎么办:出口、超时重试与链路监控的实践
网络·python·网络协议
光影少年1 天前
Express 中间件原理
后端·node.js·express
时速GEO系统1 天前
初元 AI V1.1 版本升级,首个正式版发布一周・实现生成、部署、上线、优化全流程自动化闭环
人工智能·数据挖掘·node.js