【问题标题】:Problems with socket.io via cluster in nodejs通过nodejs中的集群的socket.io问题
【发布时间】:2016-07-25 18:05:54
【问题描述】:

Socket.io 正在执行多个请求以执行握手并与客户端建立连接。对于集群,这些请求可能会到达不同的工作人员,这将破坏握手协议。 我尝试使用 radis,但没有成功

var cluster = require('cluster');
var config = require('./config/environment');

if(cluster.isMaster) {

  var server = require('http').createServer();
  var socketio = require('socket.io')(server, {
    serveClient: (config.env === 'production') ? false : true,
    path: '/socket.io-client',
    pingInterval: 25000,
    pingTimeout: 30000
  });
  var redis = require('socket.io-redis');

  socketio.adapter(redis({ host: '127.0.0.1', port: 6379 }));

  var numWorkers = require('os').cpus().length;

  for(var i = 0; i < numWorkers; i++) {
    cluster.fork();
  } 
} else {
  startServer();
}
// Start server
function startServer() {
  var express = require('express');
  var mongoose = require('mongoose');
  var multer = require('multer');

// Connect to database
  mongoose.connect(config.mongo.uri, config.mongo.options);

// Setup server
  var app = express();

  app.use(multer({ dest: './uploads/'}));

  var server = require('http').createServer(app);
  var socketio = require('socket.io')(server, {
    serveClient: (config.env === 'production') ? false : true,
    path: '/socket.io-client',
    pingInterval: 25000,
    pingTimeout: 30000
  });
  var redis = require('socket.io-redis');

  socketio.adapter(redis({ host: '127.0.0.1', port: 6379 }));

  require('./config/socketio')(socketio);
  require('./config/express')(app);
  require('./routes')(app);

  server.listen(config.port, config.ip, function () {
  });

  // Expose app
  exports = module.exports = app;
}

【问题讨论】:

    标签: node.js redis socket.io


    【解决方案1】:

    using multiple node servers with socket.io 的 socket.io 文档中,它说:

    如果您计划在不同的 进程或机器,您必须确保请求关联 使用特定的会话 ID 连接到发起的进程 他们。

    然后继续解释如何使用 nginx 代理来完成。

    或者,如果在同一台机器上使用多个集群进程,则有一个sticky-session module 可以与 node.js 集群一起使用。查看代码,sticky-session 模块对 IP 地址进行哈希处理,并使用该哈希值始终将其分配给同一个集群服务器实例。

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 1970-01-01
      • 2011-11-22
      • 2015-06-10
      • 1970-01-01
      • 2016-05-15
      • 2011-10-19
      • 1970-01-01
      • 2020-06-29
      相关资源
      最近更新 更多