【问题标题】:Removing phantom sockets in Socket.io在 Socket.io 中删除幻象套接字
【发布时间】:2014-10-14 06:53:52
【问题描述】:

我正在制作一个游戏,其中节点服务器使用socket.io 与 javascript 客户端对话。玩家可以连接和断开游戏,服务器会跟踪连接的人。但是,我发现很多时候当我关闭服务器,关闭所有打开的客户端选项卡,然后重新启动一个新的节点服务器时,连接的客户端数量似乎不正确。

例如,我将只连接一个客户端,但节点调试器显示服务器正在跟踪三个套接字。

这是一个问题,因为这些孤立的客户端通常会收到来自服务器的消息或超时,这会扰乱服务器上的游戏逻辑(没想到会有这么多玩家等)

认为发生这种情况的原因是: 1. socket.io 中的客户端在断开连接时会自动定期尝试重新连接 2.关闭选项卡时,与该页面关联的套接字由于某种原因没有被“刷新”或清除。 3.当服务器关闭再启动时,这些未刷新的客户端会想“哦,服务器已备份,我会尝试重新连接”

如何区分已关闭/与旧服务器关联的选项卡的套接字与尝试连接到新重新启动的服务器的新客户端之间的区别?或者有没有办法让我确保在服务器关闭或选项卡时客户端被“刷新”?

【问题讨论】:

    标签: javascript node.js websocket socket.io client-server


    【解决方案1】:

    没有任何代码,我真的只是在这里猜测。 http://socket.io/docs/#sending-and-receiving-events

    上面,你会找到代码,我会复制它。基本上,您需要侦听套接字上的“断开连接”事件,并从用于跟踪客户端的任何数组中删除对客户端的引用。

    socket.on('disconnect', function () {
        // remove from list here
    });
    

    来自浏览器的连接将在选项卡关闭时终止,并且在发生这种情况时将调用此事件。是的,如果您重新打开该页面,他们将重新连接。

    您应该创建某种“握手”,实际上将客户端添加到您的游戏客户端列表中。从技术上讲,任何人都可以连接到 websocket。它可以像发出一个空的“init”消息一样简单,但至少那里有一些东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多