// ip hash
var worker_index = function(ip, len) {
var s = '';
for (var i = 0, _len = ip.length; i < _len; i++) {
if (!isNaN(ip[i])) {
s += ip[i];
}
}
return Number(s) % len;
};
var server = net.createServer({ pauseOnConnect: true }, function(connection) {
var worker = workers[worker_index(connection.remoteAddress, num_processes)];
worker.send('sticky-session:connection', connection);
}).listen(port);
} else {
// worker
var app = new express();
// handshake server.
var server = app.listen(0, 'localhost'),
io = sio(server);
process.on('message', function(message, connection) {
if (message !== 'sticky-session:connection') {
return;
}
server.emit('connection', connection);
connection.resume();
});
}
总结
本文实现了三种解决方案,归根到底就是“ip hash”,不同点在于在请求处理的不同阶段做ip hash。
可以在请求处理最前端做iphash,即nginx方式,这也就是第一种方案;
可以在请求处理的第二层分发处做iphash,即上帝进程路由的方式,即第三种;
也可以在请求处理的终端做iphash,即服务端路由的方式,也就是第二种;
同时共享session也同样可以实现,借助socket.io-redis模块也可以实现。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对软件开发网的支持。









