繁体   English   中英

在Socket.io中删除幻影套接字

[英]Removing phantom sockets in Socket.io

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

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

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

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

我如何分辨已关闭其选项卡/与旧服务器相关联的套接字与尝试连接到新重启的服务器的新客户端之间的区别? 还是有一种方法可以确保关闭服务器或关闭选项卡时客户端“掉线”?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM