【问题标题】:node cluster with socket.io and expressjs带有 socket.io 和 expressjs 的节点集群
【发布时间】:2012-08-18 12:01:23
【问题描述】:

这是我的服务器代码:

我正在尝试将集群与 socket.io 和 expressjs 一起使用。我正在我的四核桌面上对此进行测试。

var cluster = require('cluster')
var numCPUs = require('os').cpus().length

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork()
  }

  console.log(new Date());
}
else {
  // get required modules
  var connect = require('connect');
  var express = require('express');
  var mongo = require('mongodb');
  var MongoStore = require('connect-mongo')(express);
  var server;
  var redis = require('redis');
  var http = require('http');

  // create server object
  app = exports.module = express();


  function configureServer() {
    //configure environments
    app.configure('production', function() {
      app.use(express.errorHandler());
    });

    //configure server instance
    app.configure(function() {
      app.use(express.compress())
      // set jade as default view engine
      app.set('view engine', 'jade');
      app.use(express.bodyParser());
      app.use(express.cookieParser("refdgfd"));

      app.use(express.methodOverride());
      app.use(app.router);
      // use express logger
    });

    loadModules();
  }

  var server = http.createServer(app).listen(80);

  socket = require('socket.io').listen(server);

  var RedisStore = require('socket.io/lib/stores/redis')
    , pub    = redis.createClient()
    , sub    = redis.createClient()
    , client = redis.createClient();
  socket.set('store', new RedisStore({
    redisPub : pub
  , redisSub : sub
  , redisClient : client
  }));

  socket.configure(function() {
    socket.set('log level', 1);
    socket.set('transports', ['websocket']);
  });

  configureServer();
}

有什么明显错误的地方吗?

日志表明一切都发生了 4 次。这似乎是正确的。但是我的 socket.io 的频道用户也表明,每当我连接到一个页面时,我都会连接 4 次,(创建 4 个用户套接字)。这似乎是错误的。我该如何修复它,我的代码是否还有其他问题。谢谢。

【问题讨论】:

  • 我也有同样的问题。核心数中的重复消息。我已经尝试了所有的组合,但没有运气。你找到解决办法了吗?

标签: node.js redis socket.io cluster-computing node-cluster


【解决方案1】:

目前socket.io 不完全支持node.js cluster。使用websocket 传输对我来说效果很好,但xhr-pooling 失败了。您可以在此问题中获得更多信息:#939#917。问题是xhr-pooling 请求可以进入与最初授权的线程不同的线程。

【讨论】:

  • 谢谢,我实际上只使用 websocket,忽略了在我的代码中包含它,我现在已经更新了。 xhr-polling 除了这里提到的问题之外还有一些问题,websocket 一般通过 SSL 是可靠的。
猜你喜欢
  • 1970-01-01
  • 2015-06-25
  • 2016-05-15
  • 2017-01-21
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
相关资源
最近更新 更多