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

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

相关推荐
石牌桥网管8 小时前
OpenSSL 生成根证书、中间证书和网站证书
网络协议·https·openssl
理想不理想v8 小时前
vue种ref跟reactive的区别?
前端·javascript·vue.js·webpack·前端框架·node.js·ecmascript
暮毅13 小时前
10.Node.js连接MongoDb
数据库·mongodb·node.js
半桶水专家14 小时前
用go实现创建WebSocket服务器
服务器·websocket·golang
阿尔帕兹14 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
FeelTouch Labs15 小时前
Netty实现WebSocket Server是否开启压缩深度分析
网络·websocket·网络协议
千天夜16 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
follycat17 小时前
[极客大挑战 2019]HTTP 1
网络·网络协议·http·网络安全
earthzhang202118 小时前
《深入浅出HTTPS》读书笔记(5):随机数
网络协议·http·https
xiaoxiongip66618 小时前
HTTP 和 HTTPS
网络·爬虫·网络协议·tcp/ip·http·https·ip