我正在使用相同服务器上的express
和socket.io
Node.js库,聆听相同端口。我想使用cluster
模块来支持循环负载平衡,但我希望express
和socket.io
的负载平衡行为不同。行为如下:
是否有可用的库来完成我想要的行为?如果没有,我该怎么做才能完成这些行为?
答案 0 :(得分:0)
有很多方法可以做到这一点。我要把你链接到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的房间功能可以完成你在第二点尝试做的事情,而不是依赖于创建新的工作任务。这只是我的看法。