Heroku 上的粘性会话
Sticky Session on Heroku
我们有一个 NodeJS 应用程序 运行 Heroku 上的 SocketIO 和集群。为了使 SocketIO 正常工作,我们使用这里讨论的 redis-adapter:https://socket.io/docs/using-multiple-nodes/。
然后我们实现了粘性会话,如粘性会话文档所示:https://github.com/elad/node-cluster-socket.io。
事实证明,当我们部署到 Heroku 时,connection.remoteAddress in:
// Create the outside facing server listening on our port.
var server = net.createServer({ pauseOnConnect: true }, function(connection) {
// We received a connection and need to pass it to the appropriate
// worker. Get the worker for this connection's source IP and pass
// it the connection.
var index = worker_index(connection.remoteAddress, num_processes);
var worker = workers[index];
worker.send('sticky-session:connection', connection);
}).listen(port);
实际上是一些 heroku 路由服务器的 IP 地址,而不是客户端 IP。我看到请求头"x-forwarded-for"可以用来获取客户端IP,但是当我们这样暂停连接时,我们连头都没有吗?
我们四处寻找解决方案,但显然没有好的解决方案。
以下是一些更好的建议:
https://github.com/indutny/sticky-session/issues/6
https://github.com/indutny/sticky-session/pull/45
None 其中的性能似乎不错,因此我们最终将 SocketIO 通信更改为仅 Websockets。这消除了粘性会话的需要。
我们有一个 NodeJS 应用程序 运行 Heroku 上的 SocketIO 和集群。为了使 SocketIO 正常工作,我们使用这里讨论的 redis-adapter:https://socket.io/docs/using-multiple-nodes/。
然后我们实现了粘性会话,如粘性会话文档所示:https://github.com/elad/node-cluster-socket.io。
事实证明,当我们部署到 Heroku 时,connection.remoteAddress in:
// Create the outside facing server listening on our port.
var server = net.createServer({ pauseOnConnect: true }, function(connection) {
// We received a connection and need to pass it to the appropriate
// worker. Get the worker for this connection's source IP and pass
// it the connection.
var index = worker_index(connection.remoteAddress, num_processes);
var worker = workers[index];
worker.send('sticky-session:connection', connection);
}).listen(port);
实际上是一些 heroku 路由服务器的 IP 地址,而不是客户端 IP。我看到请求头"x-forwarded-for"可以用来获取客户端IP,但是当我们这样暂停连接时,我们连头都没有吗?
我们四处寻找解决方案,但显然没有好的解决方案。
以下是一些更好的建议:
https://github.com/indutny/sticky-session/issues/6
https://github.com/indutny/sticky-session/pull/45
None 其中的性能似乎不错,因此我们最终将 SocketIO 通信更改为仅 Websockets。这消除了粘性会话的需要。