Autobahn twisted websocket服务器不会向客户端发送消息,除非它从客户端接收到消息

2024-09-30 08:33:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我运行的是autobahn/TwistedPythonWebSocket服务器,向客户端发送消息时遇到问题。它似乎只在客户端发送消息时才向客户端发送消息。出于某种原因,如果我想强制将消息发送到已连接的客户端,则消息会被卡在队列中,直到任何客户端向我发送消息为止。此时,所有排队的消息都将发送到所有客户端

我能够针对这个python autobahn/twisted websocket服务器使用python客户端和javascript客户端重现这种行为

有人能告诉我如何正确地从websocket服务器向所有连接的客户端发送消息吗?我的目标是让客户端订阅事件,然后服务器只向它们发送事件消息。但出于某种原因,上述行为不允许服务器向客户端发送消息,除非他们首先向服务器发送消息

您可以使用下面的代码轻松地复制它:您只需要一台服务器和一台客户端就可以复制它。我使用了两个不同的客户端来证明问题出在服务器上

Autobahn/twisted python websocket server

Javascript websocket client

Python websocket client

无论我使用哪个websocket客户端,我都看到了相同的行为。很明显,websocket服务器出于某种原因正在将消息排队

服务器每5秒在其声称正在发送消息的点上记录一次日志

Python客户端显示服务器发送消息和Python客户端接收消息的时间差。请注意,它们是成片出现的,有些出现了巨大的延迟

Javascript客户端只有在向服务器发送一条新消息后才能将它们分成4块


Tags: 服务器client消息客户端目标队列事件twisted
1条回答
网友
1楼 · 发布于 2024-09-30 08:33:00

Twisted API不是线程安全的。除了reactor.callFromThread之外,您只能在运行reactor的线程中调用它们

首先,尝试在基于Twisted的程序中完全不使用多线程。我在你的代码中没有看到任何调用多线程的东西

相关问题 更多 >

    热门问题