首页 > 解决方案 > 将 socket.io 升级到 v3 后出现 express-session 问题

问题描述

我正在使用该socket.io库将事件发送到前端的 Node/Express 后端。我们决定将它(在后端和前端)升级到版本 3,但我们遇到了一个目前无法解决的问题。我将尝试解释它:

this._socketIO.on('connection', socket => {
    // Add the socket id to the session
    socket.request.session.socketId = socket.id;
    socket.request.session.save();

    logger().info(`WebSocket: User connected (ID: ${socket.id})`);
    
    socket.on('disconnect', () => {
        logger().info(`WebSocket: User disconnected (ID: ${socket.id})`);
    });
});

我一直在从官方页面(https://socket.io/docs/v3/migrating-from-2-x-to-3-0)检查迁移文档,但我找不到这个问题的答案.

有什么线索吗?提前致谢,

标签: node.jssocket.ioexpress-session

解决方案


我们发现问题是因为我们注册了 2 个会话中间件,一个用于常规请求,另一个用于套接字请求(以保存关联的套接字 ID),有时由于竞争条件而失败。根据首先管理哪些请求,会话是否使用套接字 id 保存。

在完成所有需要的登录请求后,我们已经延迟了套接字连接,现在它工作正常。

干杯,


推荐阅读