【问题标题】:Socket.io clients seem to connect to different sockets on the same serverSocket.io 客户端似乎连接到同一服务器上的不同套接字
【发布时间】:2020-07-31 01:32:47
【问题描述】:

您好,我正在运行一个标准(示例)socket.io 聊天室,但我遇到了一个不知道如何调试的问题。

聊天室似乎运作正常,客户可以广播他们的消息,但有时在连接时就像他们不在聊天室中一样 - 其他客户看不到他们的存在或消息。当客户端没有在同一时间加入套接字时,经常会发生这种情况。

就好像它们连接到了一个完全不同的套接字。

我认为这可能与 cookie 和会话有关。如果客户清除他们的会话,他们将在聊天中重新团聚。

也许在(或之前)连接时我可以清除会话数据?怎么样?

【问题讨论】:

  • 如果不了解您的代码是如何工作的,我认为我们无法为您提供帮助。我们需要了解您如何识别特定用户,以便了解在他们重新连接时将他们放入哪个聊天室,并了解您使用会话数据的目的。

标签: javascript node.js sockets websocket socket.io


【解决方案1】:

对于客户端连接在相同 IP 和端口上的聊天服务器没有要求。通常,要求他们连接到同一服务器,该服务器必须维护一个客户端连接列表以启用他们之间的聊天。

聊天是这样的:

Server 设置一个 ServerSocket 来接受连接。客户端连接,这些连接以数组、对象或其他形式存储在服务器上。当服务器从其中一个客户端获得消息事件时,该消息随后被广播到所有其他客户端。

因此,如果您有一个客户没有收到任何消息并且似乎在一个空房间里,那么问题很可能是他们不属于同一个已连接客户集合的一部分,不属于同一个聊天应用程序,或根本没有连接。

【讨论】:

  • 感谢您的想法@ControlAltDel - 我对您所说的 IP 和端口感到困惑,因为我知道在这种情况下这些没有错,但您是对的已连接客户端的集合——由于重复的过程。
【解决方案2】:

好吧,我想我明白了,我是对的并且错了。

我认为客户端正在连接到“完全不同的套接字”,但这与 cookie 和会话无关:

我通过对正在运行的进程的研究发现(由于其他一些非常奇怪的错误)不知何故旧版本的 socket.io 服务器脚本在后台运行了一段时间。我希望客户端随机连接到两个 io 服务器脚本之一:不好。在某种意义上工作,但在不同的世界中工作。

杀死那些流氓进程似乎解决了很多问题。

【讨论】:

    猜你喜欢
    • 2015-07-19
    • 2019-06-08
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多