【问题标题】:Remove objects on disconnect socket.io删除断开 socket.io 上的对象
【发布时间】:2012-04-12 16:14:03
【问题描述】:

我正在使用 Nodejs 和 Socket.io。当客户端连接时,会创建新的 JavaScript 对象。

这些对象会永远存在吗?当客户端断开连接时,它们应该被删除还是删除?甚至可以删除对象吗?我知道删除不起作用...

谢谢 - 我想这是一个比较笼统的问题,任何建议都会很有帮助。

谢谢!

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    如果您不清理,那么是的,它们将永远留在那里,因为我认为您正在使它们全球化。

    一旦用户断开连接,您应该通过绑定到disconnect 事件侦听器进行清理:

    var clients = {}
    sockets.on('connection', function(socket) {
      clients[socket.id] = socket;
    
      socket.on('disconnect', function() {
        delete clients[socket.id];
      });
    });
    

    【讨论】:

    • 太好了,谢谢!我假设我可以对“客户”使用相同的方法来跟踪其他对象?在“套接字”功能之外还创建了几个其他对象。
    • 跳起来!有些人所做的,他们将对象添加到“socket”变量中,然后它会自动销毁。 socket.data = "foo" 然后客户端只有该套接字的 id。
    • 我不知道为什么,但delete clients[socket.id]; 有时只是不起作用。根据我的研究,这似乎是一个 socket.io 问题......
    • @christian 是的,我也有这个问题....grrrrr ....我终于使用了“卸载时同步断开”:在 io.connect(客户端)中为真,并且不知何故它起作用了跨度>
    • delete is not allowed in strict mode 有没有其他方法可以实现这一点?
    【解决方案2】:
       socket.on('disconnect', disc => {
        console.log("disconnect");
        console.log(socket.id);
        console.log(rects);
        console.log(rects.indexOf(id));
          let index = rects.indexOf(id);
          rects.splice(index, 1);
          socket.broadcast.emit("discon", id);  
       });
    

    【讨论】:

    • 你能补充一些关于你的解决方案的细节吗?仅代码答案不是很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2013-11-29
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多