我遇到了这两个用于节点 js 的粘性会话库
https://github.com/indutny/sticky-session
https://github.com/wzrdtales/socket-io-sticky-session
两者有什么区别,我的需要只是实现带有节点集群的套接字,以及将来如果我想添加 Ngnx Server。
在 Socket.io 文档中,他们提到了前一个,但是这个链接
Socket.io 'Handshake' 因集群和粘性会话而失败
说第二个更好!
我遇到了这两个用于节点 js 的粘性会话库
https://github.com/indutny/sticky-session
https://github.com/wzrdtales/socket-io-sticky-session
两者有什么区别,我的需要只是实现带有节点集群的套接字,以及将来如果我想添加 Ngnx Server。
在 Socket.io 文档中,他们提到了前一个,但是这个链接
Socket.io 'Handshake' 因集群和粘性会话而失败
说第二个更好!
最近,我发现了sticky-cluster,这个模块的实现非常简单。
基准测试非常好,他们的描述说:比module快 10 倍,并且散射更好sticky-session
。
示例代码:
'use strict';
var sticky = require('sticky-cluster');
function startFn (callback) {
var async = require('async');
async.waterfall(
[
// connect to remote services
function (callback) {
async.parallel(
[
// fake db 1
function (callback) { setTimeout(callback, 2000); },
// fake db 2
function (callback) { setTimeout(callback, 1000); }
],
callback
);
},
// configure the worker
function (services, callback) {
var http = require('http');
var app = require('express')();
var server = http.createServer(app);
// get remote services
//var fakedb1 = services[0];
//var fakedb2 = services[1];
// all express-related stuff goes here, e.g.
app.use(function (req, res) { res.end('Handled by PID = ' + process.pid); });
// all socket.io stuff goes here
//var io = require('socket.io')(server);
// don't do server.listen(...)!
// just pass the server instance to the final async's callback
callback(null, server);
}
],
function (err, server) {
// fail on error
if (err) { console.log(err); process.exit(1); }
// pass server instance to sticky-cluster
else callback(server);
}
);
}
sticky(startFn, {
concurrency: parseInt(require('os').cpus().length, 10),
port: parseInt(process.env.PORT, 10),
debug: (process.env.NODE_ENV === 'development')
});