2015-09-04 30 views
0

我使用的是Node.js的同一服务器expresssocket.io图书馆工作,听的同一端口上。我想使用cluster模块来支持循环负载平衡,但我希望expresssocket.io的负载平衡行为不同。的行为如下:粘socket.io会议通过cookie中的node.js集群,而不黏快递会议

  1. 为HTTP传入连接/ S应该连接到任何单个工人
  2. 为WS/S传入连接应连接到特定的工人的基础上,cookie值 ---更广泛地说,根据一个值

是否有任何可用的库来实现我想要的行为?如果不是,我应该如何去完成这些行为?

回答

1

有很多方法可以做到这一点。我会把你链接到this guide on using redis as a pub sub,但我会给你一个超级简短的介绍它的样子。

所以产卵两个集群在启动时,或然而,许多你想..

var aWorker = cluster.fork(); 
var bWorker = cluster.fork(); 

,那么你需要将其设置为监听它们各自的端口,所以使用net模块:

var server1 = require('net').createServer([options], function(connection) { 
    aWorker.send('ConnectionEvent' , connection); 
}).listen(80); //HTTP/WS 
var server2 = require('net').createServer([options], function(connection) { 
    bWorker.send('ConnectionEvent' , connection); 
}).listen(443); //HTTPS/WSS 

集群中的过程:

var app_server = require('express')().listen(0, 'localhost'); 
var io = require('socket.io')(app_server); 
io.adapter(require('socket.io-redis')({ host: '127.0.0.1', port: **REDIS PORT** }); 
io.on('connection', function (socket) { 
    //Rest of your io server code 
... 

process.on('message' , function(message, connection) { 
    if(connection && message === 'ConnectionEvent') { 
     app_server.emit('connection', connection); 
     connection.resume(); 
    } 
} 

相信Socket.io的房间功能交流会在第二点上完成你想要做的事情,而不是依靠创建新的工作任务。这只是我的看法。