繁体   English   中英

nodejs cluster socket.io nginx配置

[英]nodejs cluster socket.io nginx configuration

我正在运行一个带有socket.io库的nodejs集群。 我通过nginx服务器代理请求。 Websocket连接在大多数情况下工作正常,但它不能在socket.io中使用轮询作为传输协议。

这是伪代码:

if (cluster.isMaster) {
  // Fork workers.
 for (var i = 0; i < numCPUs-1; i++) {
    cluster.fork();
  }
 else{
 var server = http.createServer(function(request, response){
    console.log('Connecting server');
    response.end();
});

server.listen(port);
var socket_io = require('socket.io')(server);
var redis_adapter = require('socket.io-redis');
//config.redis.ip,config.redis.port
socket_io.adapter(redis_adapter({ host: config.redis.ip, port: config.redis.port }));

socket_io.use(function(socket, next){
});


socket_io.on('connection', function (socket) {
};

想知道代码中是否有任何问题。 我们是否需要使用粘性会话 。如果是,在我的情况下使用它的正确方法是什么。

websockets默认是粘滞的。

轮询作为传输的问题是您的连接请求将转到worker1,而握手或子请求可能会转移到其他worker..lets说worker2。 并且此worker2将不具有与worker1建立的此套接字连接的信息。

如果您的socket.io服务器是直接部署,则可以使用sticky-session( http://socket.io/docs/using-multiple-nodes/ )。

但是,如果您的socket.io服务器位于代理服务器后面,则粘性会话可能无法以有效的方式工作,因为粘性服务器根据远程IP地址平衡请求。 在代理服务器的情况下,所有请求最终将落在同一个工作人员上,而其余的工作人员将是理想的。

在这种情况下,一种可能的解决方案是在多个端口上启动socket.io worker并在nginx / apache中执行集群平衡。 联系以获得进一步的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM