gpt4 book ai didi

node.js - 使用多个服务器实例扩展 websockets/ws

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:47 26 4
gpt4 key购买 nike

我正在使用websockets/ws在单机上。它工作正常。我想在多核和多个实例上水平扩展它。对于多核,我尝试使用 pm2看起来效果很好。

第一个问题:这是最好的方法还是合适的方法?这是我使用 pm2 的测试代码

// ws-server.js
const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 3131 });

var pid = process.pid + ''
console.log('process pid: '+ pid)

wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
if (message === 'get-pid') {
ws.send('pid-' + pid)
} else {
var matched = pid === message ? 'old friends' : 'strangers'
ws.send([pid, message, 'we are ' + matched].join(', '))
}
});
ws.send('first time')
});

和客户端 websocket 实例

// ws-cient.js
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:3131/');

var pid
ws.on('open', function open() {
ws.send('get-pid');
setInterval(function() {
ws.send(pid)
}, 1000)
});

ws.on('message', function incoming(data) {
if (/^pid/.test(data)) {
pid = data.match(/\d+/)[0]
console.log('got pid: ' + pid)
} else {
console.log(data)
}
});

只需使用 pm2 运行服务器和客户端

   $ pm2 start ws-server.js -i 50
$ pm2 start ws-client.js -i 50

如果您现在看到日志pm2loggingws-client每个客户端每秒都会点击相同的连接(在服务器上)。因此,对于多核 ws 可以与 PM2 配合使用。

第二个问题:如何扩展多个实例?我刚刚看到SocketCluster用于水平缩放,但它可以与 websockets/ws 一起使用吗,因为我已经使用 ws 开发了代码。水平缩放的其他解决方案可能是什么?

最佳答案

这个问题的答案有点晚了,但对于仍然面临这个问题的人来说,我写了一篇关于在介质上集群 WebSocket 服务器的文章。

https://medium.com/@mohsenes/websocket-cluster-with-nestjs-and-redis-a18882d418ed

关于node.js - 使用多个服务器实例扩展 websockets/ws,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46847784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com