2016-11-08 7 views
3

私は、LoopbackJSアプリケーションをIBM Bluemixにデプロイし、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 
})); 

私はループバックアプリへのリクエストを発行するとき、私は2枚のクッキーがセットされていることがわかりますレスポンスヘッダ:私は同じブラウザからの要求を再発行する際

とにかく
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側のログに見ることができます。

私は実際にこれらの科目に慣れていないので、スティッキセッションを適切に設定するのに役立つ助言を本当に感謝します。 https://docs.cloudfoundry.org/concepts/http-routing.html#sessions

パー

+0

Checkout https://github.com/rajaraodv/redispubsub – opiethehokie

答えて

0

「後続の要求では、JSESSIONIDとVCAP_IDクッキーの両方を提供しなければならないクライアントは。CFルーティングティアは、同じアプリケーションインスタンスにするたびに、クライアントの要求を転送するVCAP_IDを使用しています。」

VCAP_IDを選択し、JSESSIONIDと一緒に提供

+0

問題は、JSAPSIONIDクッキーと一緒に応答ヘッダーに戻ったときにVCAP_ID Cookieがブラウザに保存されないことが原因と考えられます。 JSESSIONID Cookieは格納されますが、VCAP_IDは格納されません。したがって、JSESSIONIDクッキーのみが2番目の要求のヘッダーで送信されます。なぜVCAP_IDクッキーが保存されないのでしょうか? –

関連する問題