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

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

相关推荐
x***r1511 天前
nvm-windows 安装教程:Node.js 多版本管理(避坑版)
windows·node.js
上海云盾第一敬业销售1 天前
高防CDN与高防IP应用场景架构解析
网络协议·tcp/ip·架构
计算机安禾1 天前
【算法分析与设计】第46篇:近似难度与不可近似性理论
网络协议·算法·ssl
Master_Azur1 天前
JavaEE之网络编程(TomCat介绍)
后端·网络协议
sdm0704271 天前
网络原理-2.传输层协议TCP
网络·网络协议·tcp/ip
云水一下1 天前
掌握 Express 框架:从零到 MVC 博客系统
node.js·express
米丘1 天前
HTTP 3xx 重定向类状态码
http·node.js
丑过三八线1 天前
npm 私有仓库找不到包的解决方案
前端·npm·node.js
代码中介商1 天前
HTTP 完全指南(一):请求与响应报文结构深度详解
网络·网络协议·http
米丘1 天前
HTTP 强缓存 和 协商缓存 (浏览器缓存)
http·node.js·浏览器