扩展Socket io需要多个端口上的多个实例?还是单个端口?

时间:2019-01-20 16:15:17

标签: node.js nginx redis socket.io

缩放socket.io时,我有点困惑。尤其是当Nginx发挥作用时,我阅读了几个线程,它们讲述了有关端口的不同内容。按照我的逻辑,应该在不同端口上创建更多套接字io服务器实例,以便Nginx负载均衡器将它们放在上游节点上,对吗?

比方说,

let http = require('http').Server(app);
let io = require('socket.io')(http);

io.on('connect', function (socket) {

});

http.listen(7000, function () {
    // Now listening
});

let http2 = require('http').Server(app);
let io2 = require('socket.io')(http2);

http2.listen(7001, function () {
    // Now listening
});

io2.on('connect', function(socket){

});
// And on making 7002, 7003

在Nginx服务器上,

upstream nodes {  
    server 127.0.0.1:7001;
    server 127.0.0.1:7002;
    server 127.0.0.1:7003;
}
server {  
    listen 7000;

然后使用Redis Pub / Sub,我将使这些套接字io服务器在不同的端口上进行发布并相互订阅,以使其看起来像一个整体的大型聊天室。所以这就是我的理解,如果我弄错了,请纠正我。

因为当我阅读诸如该链接Scalable architecture for socket.io上的答案之类的注释或Nginx页面本身https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/时会感到困惑,因为Nginx页面本身在一个端口中进行负载平衡。有人可以解释一下,如果我把整个事情弄错了,那么如何在单个端口上实现负载平衡?如果套接字io已经在单个端口上发生,那么需要什么负载均衡?我只是不明白。如何在单个端口上进行负载平衡更改以处理套接字上的更大请求? (如果我只想做一个套接字io聊天程序,它是一个节点应用程序,而我网页的其余部分则基于php)

0 个答案:

没有答案