我正在创建一个应用程序,我需要将套接字映射到某个对象。我认为使用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]);
}
});
我不确定,但我认为这不是理想的效果。为什么会发生这种情况?我将如何解决这个问题?
答案 0 :(得分:4)
我使用node-inspector来调试我的应用程序,因为我在某个断点上持有代码,它断开了客户端(可能是一些超时客户端)。这就是我继续执行代码时得到一个新的socket.id的原因。
答案 1 :(得分:0)
看起来'someOtherEvent'在'myEvent'或套接字重新连接之前已经发出。我在生产中的两个不同项目中使用socket.id作为连接标识符,它没有任何问题。