Socket.IO socket.id更改为相同的客户端,无需重新连接

我正在做一个应用程序,我需要将套接字映射到某个对象。 我以为我会安全使用Socket.IO提供的socket.idvariables。 不幸的是,在debugging的时候,我发现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]); } }); 

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

我正在使用节点检查器来debugging我的应用程序,因为我拿着一些断点上的代码,它断开客户端(可能是一些超时客户端)。 这就是为什么当我继续执行代码时,我得到了一个新的socket.id。

看起来像'someOtherEvent'之前'myEvent'或套接字已被重新连接。 我使用socket.id作为连接标识符在生产中的两个不同的项目,它工作没有任何问题。