缩放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)