【发布时间】:2012-01-23 16:55:53
【问题描述】:
我希望 Socket.io 在 Node.js v.0.6.0 及更高版本中使用native load balancing(“集群”)进行多线程工作。
据我了解,Socket.io 使用 Redis 来存储其内部数据。我的理解是:我们不想为每个工作人员生成一个新的 Redis 实例,而是要强制工作人员使用与主服务器相同的 Redis 实例。因此,连接数据将在所有工作人员之间共享。
master 里面是这样的:
RedisInstance = new io.RedisStore;
我们必须以某种方式将RedisInstance 传递给工作人员并执行以下操作:
io.set('store', RedisInstance);
受this implementation 使用旧的第 3 方集群模块的启发,我有以下非工作实现:
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
var sio = require('socket.io')
, RedisStore = sio.RedisStore
, io = sio.listen(8080, options);
// Somehow pass this information to the workers
io.set('store', new RedisStore);
} else {
// Do the work here
io.sockets.on('connection', function (socket) {
socket.on('chat', function (data) {
socket.broadcast.emit('chat', data);
})
});
}
想法?我可能完全走错了方向,任何人都可以指出一些想法吗?
【问题讨论】:
-
我想知道你最终使用的是什么方法。
标签: javascript node.js socket.io