javascript – Node.js,多线程和Socket.io

前端之家收集整理的这篇文章主要介绍了javascript – Node.js,多线程和Socket.io前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找在Node.js v.0.6.0及更高版本中使Socket.io工作多线程与 native load balancing(“集群”).

从我所理解的,Socket.io使用Redis来存储其内部数据.我的理解是:而不是为每个工人生成一个新的Redis实例,我们要强制工作人员使用与主人相同的Redis实例.因此,所有工作人员将共享连接数据.

在主人这样的东西:

RedisInstance = new io.RedisStore;@H_403_7@ 
 

我们必须以某种方式通过RedisInstance给工人,并执行以下操作:

io.set('store',RedisInstance);@H_403_7@ 
 

灵感来自this implementation使用旧的第三方群集模块,我有以下不工作的实现:

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);
    })
  });
}@H_403_7@ 
 

思考?我可能会完全错误的走向,任何人都可以指出一些想法?

解决方法

其实你的代码应该是这样的:
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();
  }
} else {
  var sio = require('socket.io'),new RedisStore);

  // Do the work here
  io.sockets.on('connection',data);
    })
  });
}@H_403_7@ 
 

另一个选择是打开Socket.IO来监听多个端口,并具有像HAProxy的负载平衡的东西.
无论如何,你知道最重要的事情:使用RedisStore扩展一个进程!

资源:

http://nodejs.org/docs/latest/api/cluster.html
How can I scale socket.io?
How to reuse redis connection in socket.io?
Node: Scale socket.io / nowjs – scale across different instances
http://delicious.com/alessioaw/socket.io

猜你在找的JavaScript相关文章