2016-11-08 39 views
3

我在IBM Bluemix上部署了LoopbackJS应用程序,并在3个实例上进行了横向扩展。此应用程序还使用Socket.io来实现聊天系统。如何启用在CloudFoundry/Bluemix上运行的LoopbackJS应用程序上的粘性会话

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

我知道根据12 factors应该避免粘性会话。但它似乎是唯一的解决方案,使socket.io能够与多个节点正常工作。

如陈述here,似乎我需要在回送应用程序中设置一个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一侧的日志中看到。

我真的对这些主题没有经验,所以真的很感谢任何有助于正确配置粘性会话的建议。

+0

结帐https://github.com/rajaraodv/redispubsub – opiethehokie

回答

0

https://docs.cloudfoundry.org/concepts/http-routing.html#sessions

“在后面的请求,客户端必须同时提供JSESSIONID和VCAP_ID的糕饼,该CF路由层使用的VCAP_ID每次客户端请求转发到同一个应用程序实例。”

例如选择VCAP_ID并与JSESSIONID一起供应

+0

问题似乎是,浏览器未存储VCAP_ID cookie时,回到JSESSIONID cookie的响应头中。 JSESSIONID cookie被存储,但不是VCAP_ID。因此,只有JSESSIONID cookie会在第二个请求的标头中发送。任何想法为什么VCAP_ID cookie没有保存? –

相关问题