Javascript 使用Socket.io和http轮询的共享用户
我正在尝试使用Socket.io和Node.js将Aws Lambda用于我的应用程序 由于websocket对lambda的限制,我决定使用http轮询,但是当客户端执行第一个接收SID的请求时,在第二个请求中,服务器抛出会话id未知,因为触发了另一个实例,并且内存中没有该用户 我尝试使用Javascript 使用Socket.io和http轮询的共享用户,javascript,node.js,aws-lambda,socket.io,engine.io,Javascript,Node.js,Aws Lambda,Socket.io,Engine.io,我正在尝试使用Socket.io和Node.js将Aws Lambda用于我的应用程序 由于websocket对lambda的限制,我决定使用http轮询,但是当客户端执行第一个接收SID的请求时,在第二个请求中,服务器抛出会话id未知,因为触发了另一个实例,并且内存中没有该用户 我尝试使用socket.io redis作为socket.io的redis适配器,我尝试使用express session和express socket.io session在redis上共享会话,但没有任何效果 在我
socket.io redis
作为socket.io的redis适配器,我尝试使用express session
和express socket.io session
在redis上共享会话,但没有任何效果
在我的server.js上,我有:
io.adapter(
redisAdapter({
host: REDIS_URL,
port: REDIS_PORT,
requestsTimeout: 5000
})
);
var redisStoreInstance = new RedisStore({
host: REDIS_URL,
port: REDIS_PORT,
client: redis
});
var sessionMiddleware = session({
store: redisStoreInstance,
secret: "secret",
resave: true,
saveUninitialized: true
});
io.use(sharedsession(sessionMiddleware, {
autoSave:true
}));
io.sockets.on('connection', (socket) => {
socket.handshake.session.save();
});
通过分析engine.io(socket.io使用的lib)代码,我看到了抛出异常的地方:
if (!this.clients.hasOwnProperty(sid)) {
debug('unknown sid "%s"', sid);
return fn(Server.errors.UNKNOWN_SID, false);
}
这个变量客户机没有复杂的实现,只是一个局部变量
所以,我的问题是:
是否可以使用socket.io为多个实例创建共享用户存储?
(例如,保存在redis上,并使socket.io查找此redis实例的会话id,而不是内存变量)
提前感谢。相关讨论:。我从各种阅读资料中可以看出,AWS Lambda基本上是长寿命socket.io连接的体系结构不匹配。从各种阅读资料中可以看出,AWS Lambda基本上是长寿命socket.io连接的体系结构不匹配。