2

我正在制作一个需要将套接字映射到某个对象的应用程序。我认为使用 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]);
    }
});

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

4

2 回答 2

4

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

于 2012-08-20T13:31:39.297 回答
0

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

于 2012-08-13T15:57:45.277 回答