[英]Sticky socket.io sessions by cookie for node.js cluster without sticky express sessions
我在同一服务器上使用Node.js的express
和socket.io
库,在同一端口上侦听。 我想使用cluster
模块来支持循环负载平衡,但是我希望express
和socket.io
的负载平衡行为有所不同。 行为如下:
有没有可用的库来实现我想要的行为? 如果没有,我应该如何完成这些行为?
您可以通过多种方式来执行此操作。 我将把您链接到本指南,介绍如何将Redis用作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的room函数可以完成您第二点要完成的工作,而不是依赖于创建新的工作程序任务。 不过那只是我的意见。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.