前言
- 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模块 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!
有什么不足的地方请大家指出谢谢 -- 風过无痕