javascript - webscokets 如何连接到集群内正确的子进程?
问题描述
我试图弄清楚 websockets 如何在 Nodejs/PM2 集群中工作。
我刚刚通过使用 PM2 启动 4 个子进程进行了一个实验,然后从客户端我向所有 4 个套接字服务器(每个子进程中运行 1 个 ws 服务器)发送了多个 webocket 消息。我没想到的一件事是 Node 能够确定套接字属于哪个进程,因此客户端发送的每条消息都由正确的子进程进行控制台记录。
那么这种行为是由 Nodejs 在内部由集群模块管理的吗?这似乎也是自 Node 12 以来的一个新功能?我可能错了...
代码参考(ws模块使用tsl):https ://github.com/websockets/ws/blob/master/lib/websocket.js#L663
PS:在写答案之前,请检查我写给其他人的评论...
解决方案
你可以试试这个:
webSocket=function(server) {
var io = require('socket.io')(server,{ transports: ['websocket', 'polling'] });
var redis = require('socket.io-redis');
var pub = require('redis').createClient(6379,'localhost');
var sub = require('redis').createClient(6379,'localhost');
io.adapter(redis({pubClient: pub, subClient: sub}));
io.sockets.on('connection', function (socket) {
console.log('Connection Establish!!!!!');
)}
};
app.JS
https.createServer(options, app).listen(httpsAddress, function () {
console.log("Express server listening on port " + config.get('PORT'));
webSocket(this)
})
推荐阅读
- java - 方法不返回字符串
- sql - 如何在 SQL Server 中使用 where 条件对从一年到另一年的数据求和,即从财政年度到下一年?
- flutter - Flutter 的深色模式颜色
- vb.net - 使用资源中的 .txt 文件并将随机行复制到文本框
- javascript - localhost 不为我使用的路由器和控制器输出 JSON
- python - 错误:指定“socksProxy”需要一个整数作为“socksVersion”,在任何地方都找不到
- python - 无法在 Docker 中连接 NoSQLClient
- python-3.x - 在 macOS 10.14.6 上的 Python 3.7.4 中导入 ssl 时出错
- python - 如何使用正则表达式从以下文本中提取年份?
- xml - 在 .CSV 文件中为 XML 解析创建 XSL