节点集群与socket.io和expressjs

这是我的服务器代码:

我试图用socket.io和expressjs来使用群集。 我在我的四核心桌面上testing这个。

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次,(创build4个用户套接字)。 这似乎是错误的。 我该如何解决这个问题,并且在我的代码中还有其他的错误。 谢谢。

此时socket.io没有完全支持node.js cluster 。 它适用于websocket运输,但是xhr-pooling失败。 你可以在这个问题上多做些事情: #939 , #917 。 问题是xhr-pooling请求可以进入与最初授权的线程不同的线程。