簡體   English   中英

Autobahn twisted websocket 服務器不會向客戶端發送消息,除非它收到來自客戶端的消息

[英]Autobahn twisted websocket server does not send messages to client unless it receives a message from a client

我正在運行高速公路/扭曲 python websocket 服務器,並且在向客戶端發送消息時遇到問題。 當客戶端向它發送消息時,它似乎只向客戶端發送消息。 出於某種原因,如果我想強制向連接的客戶端發送消息,則消息會卡在隊列中,直到任何客戶端向我發送消息。 此時,所有排隊的消息 go 發送到所有客戶端。

我能夠使用 python 客戶端和 javascript 客戶端針對此 python 高速公路/扭曲 ZBF56D570E62562573C86B18 服務器重現此行為。

誰能告訴我如何正確地從 websocket 服務器向所有連接的客戶端發送消息? 我的目標是讓客戶端訂閱事件,然后服務器只向他們發送事件消息。 但是由於某種原因,上述行為不允許服務器向客戶端發送消息,除非他們首先向服務器發送消息。

您可以使用下面的代碼輕松地重現它:您只需要一台服務器和一個客戶端即可重現它。 我使用了兩個不同的客戶端來證明問題出在服務器上。

高速公路/扭曲 python websocket 服務器

Javascript websocket客戶端

Python websocket客戶端

無論我使用哪個 websocket 客戶端,我都看到了相同的行為。 很明顯,websocket 服務器出於某種原因正在排隊消息。

服務器日志,每 5 秒在它聲稱發送消息的點上。

Python 客戶端顯示了服務器發送消息和 python 客戶端收到消息之間的時間差。 請注意,它們是大塊的,有些延遲很大。

Javascript 客戶端僅在向服務器發送新消息后才以 4 塊為單位獲取它們。

Twisted API 不是線程安全的。 除了reactor.callFromThread之外,您只能在反應器運行的線程中調用它們。

嘗試在基於 Twisted 的程序中完全不使用多線程,作為開始。 我在您的代碼中看不到任何需要多個線程的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM