【问题标题】:Socket.IO socket.id changing for same client without reconnectSocket.IO socket.id 为同一个客户端更改而无需重新连接
【发布时间】:2012-08-20 21:31:39
【问题描述】:

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

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

【问题讨论】:

    标签: javascript node.js websocket socket.io


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 不是这样的。代码示例可能不够清楚,但只有一个事件触发与 socket.id 相关。最大的问题是,使用同一个客户端,无需重新连接 socket.id 更改。
      猜你喜欢
      • 2023-03-18
      • 2021-05-24
      • 2013-12-31
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多