我需要在IBM Bluemix上部署一个带有多个cloudfoundry实例的socket.io应用程序,以确保负载 balancer .
我按照socket.io文档和link来使用粘性会话,并确保每个套接字都转到正确的实例 .
不幸的是,我的客户端在连接事件之后断开连接并且错误“400 xhr poll”错误被触发 .
这是我的服务器代码:
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))
})
经过几个小时在Google上搜索,我不知道该怎么办了 . 我真的需要一些帮助 .
先感谢您!
2 回答
您正在使用小写
jsessionid
. 尝试大写它 . Session 文档在这里:https://docs.cloudfoundry.org/concepts/http-routing.html#sessions我最近这样做(尽管没有Redis),以解决同样的问题; socket.io和负载 balancer 器不能很好地开箱即用 . 关键是使用JSESSIONID cookie来实现会话亲和性 . 这是我的代码:
...
...