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

时间:2012-08-13 09:38:41

标签: javascript node.js websocket socket.io

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

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

2 个答案:

答案 0 :(得分:4)

我使用node-inspector来调试我的应用程序,因为我在某个断点上持有代码,它断开了客户端(可能是一些超时客户端)。这就是我继续执行代码时得到一个新的socket.id的原因。

答案 1 :(得分:0)

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