Javascript 使用Socket.io和http轮询的共享用户

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和Node.js将Aws Lambda用于我的应用程序

由于websocket对lambda的限制,我决定使用http轮询,但是当客户端执行第一个接收SID的请求时,在第二个请求中,服务器抛出会话id未知,因为触发了另一个实例,并且内存中没有该用户

我尝试使用
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连接的体系结构不匹配。