简体   繁体   English

具有socket.io和expressjs的节点集群

[英]node cluster with socket.io and expressjs

Here's my server code: 这是我的服务器代码:

I'm trying to use cluster with socket.io and expressjs. 我正在尝试使用带有socket.io和expressjs的集群。 I'm testing this on my quad core desktop. 我正在我的四核桌面上测试它。

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();
}

Is there anything that stands out to be really wrong? 有什么特别突出的错误吗?

The logs indicate that everything happens 4 times. 日志表明一切都发生了4次。 Which seems correctly. 这似乎是正确的。 But my socket.io's channel users also indicate that whenever I connect to a page, I connect 4 times, (create 4 user sockets). 但我的socket.io的频道用户也表示每当我连接到一个页面时,我连接4次,(创建4个用户套接字)。 That seems wrong. 这似乎是错的。 How do I fix it and are there other things wrong with my code. 我如何解决它,我的代码还有其他问题。 Thanks. 谢谢。

At this moment socket.io has no full support for node.js cluster . 此时socket.io没有对node.js cluster完全支持。 It works fine for me with websocket transport, but xhr-pooling fails. 使用websocket传输它对我来说很好,但是xhr-pooling失败了。 You can reed more in this issues: #939 , #917 . 你可以在这个问题上更多地考虑: #939#917 The problem is the xhr-pooling request can get into the thread different from the one which it was originally authorized. 问题是xhr-pooling请求可以进入与最初授权的线程不同的线程。

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

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