Socket.IO socket.id 更改同一客户端而不重新连接

Socket.IO socket.id changing for same client without reconnect

本文关键字:客户端 重新连接 IO socket id Socket      更新时间:2023-09-26

我正在制作一个应用程序,我需要将套接字映射到某个对象。我认为使用 Socket.IO 提供的 socket.id 变量是安全的。不幸的是,在调试时,我发现 socket.id 更改了客户端断开连接/重新连接或其他任何操作。

这里有一小段代码来展示我正在尝试做什么:

var io         = require('socket.io').listen(8080),
var myVariable = new Array();
// Main event loop
io.sockets.on('connection', function (socket) {
    socket.on('myEvent', function(data) {
        myVariable[socket.id] = data;
    }
    // 'someOtherEvent' which uses the mapped data.
    socket.on('someOtherEvent', function(data) {
        // Doesn't always work because socket.id has changed and var is empty
        doSomethingWith(myVariable[socket.id]);
    }
});

我不确定,但我认为这不是预期的效果。为什么会发生这种情况,我将如何解决它?

我正在使用节点检查器来调试我的应用程序,因为我将代码保存在某个断点上,所以它断开了客户端的连接(可能是某个超时客户端)。这就是为什么当我继续执行代码时,我得到了一个新的 socket.id。

看起来像在重新连接"myEvent"或套接字之前发出的"someOtherEvent"。我在生产中的两个不同项目中使用 socket.id 作为连接标识符,它可以正常工作。