2017-12-04 15 views
1

ロードバランシングを確実にするために、複数のcloudfoundryインスタンスを持つIBM Bluemixでsocket.ioアプリケーションをデプロイする必要があります。bluemixでsocket.ioスティッキーセッションを設定する方法

私はsocket.ioのドキュメントとこのlinkの後にスティッキセッションを使用し、各ソケットが正しいインスタンスに移動することを確認しました。

残念ながら、接続イベントの直後にクライアントが切断され、 '400 xhr poll'エラーが発生します。 Googleで検索数時間後に

const cookieParser = require('cookie-parser') 
const session = require('express-session') 
const redis = require('redis') 
const app = require('express')() 
const http = require('http').Server(app) 
const io = require('socket.io')(http) 
const RedisStore = require('connect-redis')(session) 
const redisUrl = 'myredis' 

var session = session({ 
    store: new RedisStore({client: client}), 
    secret: 'mysecret', 
    name: 'jsessionid', 
    resave: true, 
    saveUninitialized: true 
}) 

app.use(cookieParser) 
app.use(session) 

io.on('connection', function (socket) { 
    console.log('a user is connected') 

    socket.on('testPing', function() { 
     socket.emit('testPong', {}) 
    }) 
}) 


http.listen(process.env.PORT || 3000, function() { 
    console.log('listening on *:' + (process.env.PORT || 3000)) 
}) 

、私はもうしようとするのか分からない:

は、ここに私のサーバーのコードです。私は本当に助けが必要です。

ありがとうございます!

+0

あなたのコードには、jsessionidの小文字が含まれています。あなたはそれを大文字にしましたか? –

+0

ニース!ありがとう、クリス、それは今完璧に動作します! – Hepatus

+0

クール。私は答えとしてこれを追加しました。受諾して投票してもらえますか? –

答えて

0

私は最近この問題を解決しましたが(Redisなしで)、同じ問題を修正しました。 socket.ioとロードバランサは一緒にうまく一緒に再生されません。キーはセッション親和性のためにJSESSIONIDクッキーを使用することです。これは私のコードだった:

const expressSession = require('express-session'); 

...

var app = express(); 

...

app.use(
    expressSession({ 
     key: 'JSESSIONID', // use a sticky session to make sockets work 
     secret: 'arbitrary-secret', 
     cookie: { 
     maxAge: 24 * 60 * 60 * 1000, // 1 day 
     secure: false 
     }, 
     saveUninitialized: false, 
     resave: false 
    }) 
); 
//setting up socket.io for realtime communication 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
+0

up vote down投票 受け入れる 残念ながら、それは私のためには動作しません。私はすでにこのクッキーを設定しようとしています。 1つのインスタンスで正常に動作しますが、クライアントがいくつかのノードインスタンスで切断されています。 これは、BluemixがCloud Foundryアフィニティセッションを実装していないようなものです... – Hepatus

+0

私はPivotalのコードをテストしましたが、それ以上は機能しません。私は何か間違っているが、私は何を理解していない... – Hepatus

関連する問題