6

ここに私のサーバーコードがあります:

私は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 つのユーザー ソケットを作成します)。それは間違っているようです。どうすれば修正できますか?また、コードに他に問題がありますか? ありがとう。

4

1 に答える 1

3

現時点でsocket.ioは、 は完全にはサポートされていませんnode.js clusterwebsocketトランスポートでは問題なく動作しますが、xhr-pooling失敗します。この号でさらに読むことができます: #939#917。問題は、xhr-poolingリクエストが最初に承認されたスレッドとは異なるスレッドに入る可能性があることです。

于 2012-08-23T02:24:26.687 に答える