Socket.io 如何在CloudFoundry/Bluemix上运行的LoopbackJS应用程序上启用粘性会话

Socket.io 如何在CloudFoundry/Bluemix上运行的LoopbackJS应用程序上启用粘性会话,socket.io,ibm-cloud,loopbackjs,cloud-foundry,Socket.io,Ibm Cloud,Loopbackjs,Cloud Foundry,我在IBMBlueMix上部署了一个LoopbackJS应用程序,并横向扩展到3个实例。该应用程序还使用Socket.io实现聊天系统 我想激活粘性会话,以便将来自同一客户端的每个请求路由到同一个应用程序实例 我知道,根据法律,应该避免棘手的会议。但要使socket.io与多个节点正常工作,这似乎是唯一的解决方案 如上所述,我似乎需要在环回应用程序中设置JSESSIONID会话cookie 然后,我在LoopbackJS应用程序的server.js中执行了以下操作: var session =

我在IBMBlueMix上部署了一个LoopbackJS应用程序,并横向扩展到3个实例。该应用程序还使用Socket.io实现聊天系统

我想激活粘性会话,以便将来自同一客户端的每个请求路由到同一个应用程序实例

我知道,根据法律,应该避免棘手的会议。但要使socket.io与多个节点正常工作,这似乎是唯一的解决方案

如上所述,我似乎需要在环回应用程序中设置JSESSIONID会话cookie

然后,我在LoopbackJS应用程序的server.js中执行了以下操作:

var session = require('express-session');
app.use(session({
  secret: 's3Cur3',
  name: 'JSESSIONID',
  proxy: true,
  resave: true,
  saveUninitialized: true
}));
做出更改后,当我向环回应用发出请求时,我可以看到响应头中设置了两个cookie:

Set-Cookie:__VCAP_ID__=988ce9aa9b7f49cdb31d04f697d892b6024579565ea443589ed10e7a4c1c05f0; Path=/; HttpOnly, JSESSIONID=s%3Adb3KsqgZfkwEg39wrLKcsB3AWpazcOgd.TcA1vYbVB5DqemJXDS%2BLxUJ207WNC7UGmS5BpjZQ9Xc; Path=/; HttpOnly; Secure
Set-Cookie:JSESSIONID=s%3Adb3KsqgZfkwEg39wrLKcsB3AWpazcOgd.TcA1vYbVB5DqemJXDS%2BLxUJ207WNC7UGmS5BpjZQ9Xc; Path=/; HttpOnly
无论如何,当我再次从同一个浏览器发出请求时,我可以在Bluemix端的日志中看到请求由不同的应用程序实例提供

我对这些主题缺乏经验,因此非常感谢任何有助于正确配置粘性会话的建议。

Per

在后续请求中,客户端必须同时提供JSESSIONID和VCAP_ID cookies。CF路由层每次都使用VCAP_ID将客户端请求转发到同一应用程序实例


e、 g.选择VCAP_ID并与JSESSIONID一起提供

签出问题似乎是当VCAP_ID cookie与JSESSIONID cookie一起返回到响应标题时,浏览器没有存储VCAP_ID cookie。JSSessionID cookie被存储,但VCAP_ID不被存储。因此,在第二个请求的头中只发送JSSessionID cookie。知道为什么不保存VCAP_ID cookie吗?