2017-12-04 19 views
1

로드 균형 조정을 보장하기 위해 여러 cloudfoundry 인스턴스가있는 IBM Bluemix에서 socket.io 응용 프로그램을 배포해야합니다.bluemix에서 socket.io 끈적 세션을 구성하는 방법

나는 socket.io 문서와이 link에 따라 sticky 세션을 사용하고 각 소켓이 올바른 인스턴스로 이동하는지 확인했습니다.

불행히도 내 클라이언트는 연결 이벤트 직후 연결이 끊어지고 '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 아래로 투표 동의 불행히도 그것은 나를 위해 작동하지 않습니다. 이미이 쿠키를 설정하려고했습니다. 그것은 단일 인스턴스와 함께 잘 작동하지만, 여러 노드 인스턴스에서 클라이언트가 연결이 끊어졌습니다. Bluemix가 Cloud Foundry Affinity 세션을 구현하지 않은 것 같습니다 ... – Hepatus

+0

저는 Pivotal에서 테스트했는데 더 이상 작동하지 않습니다. 내가 잘못한 일을하고 있지만 이해가 안되는 ... – Hepatus