Heroku上的Socket.io“会话ID未知”错误

Posted

技术标签:

【中文标题】Heroku上的Socket.io“会话ID未知”错误【英文标题】:Socket.io "Session ID unknown" error on Heroku 【发布时间】:2017-11-29 08:00:02 【问题描述】:

我有一个使用 Socket.io 的 Node JS 应用程序部署到 heroku。我已按照https://devcenter.heroku.com/articles/node-websockets 提供的步骤正确设置代码,但不知何故,我似乎无法正确使用 Web 套接字。

我所有的套接字轮询请求都失败并出现以下错误。

"code":1,"message":"会话 ID 未知"

当我在本地运行相同的代码时,它似乎运行良好。

客户

function createSocket() 
        socket = io();

        socket.on('connect', function () 
            socket.emit('registerUser',  userEmail: $scope.userInfo.userEmail );
        );

 socket.on('list_of_files', function (data) 
            $timeout(function () 
                $scope.fileList = data;
            );

        );
    

服务器

var io = require('socket.io')(server);

    io.sockets.on('connection', function (socket) 
        socket.on('registerUser', function (data) 
            socketClients[data.userEmail] = socket;
        );
    );

我还启用了 heroku 的会话亲和性,但仍然没有运气

【问题讨论】:

你使用的是哪个版本 【参考方案1】:

ios 平台上的同样问题,“session id unknown ...”

之前

[[SocketIOClient alloc] initWithSocketURL:url config:@@"log": @NO, @"forcePolling":@YES, @"reconnectWait":@1];

之后

[[SocketIOClient alloc] initWithSocketURL:url config:@@"log": @NO, @"forcePolling":@YES, @"forceWebsockets":@YES];

【讨论】:

【参考方案2】:

我知道为时已晚,但对于那些仍在寻找答案的人,请尝试在客户端套接字上添加此选项。


path: '/socket.io',
transports: ['websocket'],
secure: true,

也只是为了您的信息,我在使用 nginx 和代理部署到登台服务器后遇到了这个问题

【讨论】:

非常感谢! 伙计号。问题是粘性会话不起作用。如果你使用 websocket 那么你并没有解决问题,你只是禁用了长轮询,这是 socket.io 的一个重要特性。

以上是关于Heroku上的Socket.io“会话ID未知”错误的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 上的 Socket.io:客户端代码

Heroku + socket.io 广播上的多个测功机

Chrome 中的“意外响应代码:503”。也许与heroku上的socket.io有关?

Heroku 上的 Socket.io 聊天应用程序与 node.js

Socket.io + NodeJS 不适用于 Heroku

使用 socket.io-redis 和 RedisToGo 在 Heroku 上扩展到 2+ dynos