問題タブ [ws4py]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - この ws4py/CherryPy の例が特定の時間後にメッセージをブロックするのはなぜですか?
私は次の設定をしています:
Python 3.4 を使用して Linux x64 で実行されているのは、受信したメッセージ (タイムスタンプを含む) とこのメッセージのランタイムを出力する ws4py-0.4.2 ブロードキャスト ハンドラーを備えた CherryPy-10.2.1 Web サーバーです。
次に、ws4py を使用してサーバーに接続する 60 のクライアント スレッド (同様の結果で 10、20、50、および 70 のスレッドも使用していました) があります。0.1 秒ごとにタイムスタンプ メッセージを送信します。
サーバー ログ ファイルの約 48500 行の後、メッセージは 10 秒のギャップの後にのみ到着します。ただし、クライアント スレッドは元の速度で送信し続けます。メッセージが送信され、バッファリングされ、10 秒後にのみ解放されるようです。
クライアント スレッドを終了しても、メッセージは失われませんが、ブロックされたメッセージはすべて解放され、ブロードキャスト ハンドラに表示されます (スレッドを実行し続ける時間に応じて、それぞれのランタイムで。クライアント スレッドはその長さを送信します)。
クライアントを閉じsock
て、850回の送信後(51000メッセージ後)に再度接続すると、最初はメッセージがブロックされますが、再接続により、これらのメッセージはすぐに「フラッシュ」され、メッセージがサーバーログに表示されます。
それらのメッセージはどこでブロックされますか? ws4pysend()
関数は を使用してsocket.sendall()
いますが、この送信の問題ですか? または、サーバー側でメッセージがブロックされていますか (クライアントを強制終了してもメッセージは引き続き配信されるため)?
この種のメッセージのブロックを知っている人はいますか?
サーバ:
クライアント:
2018 年 2 月 7 日更新:
「ブロック動作」の理由はself.sock.sendall()
、ws4py パッケージの websocket.py ファイルでの呼び出しのタイムアウトです。
broadcast()
クラスWebSocketManager
(manager.py)の関数を編集して、例外をログに記録できます。
しかし、この例でこれらのタイムアウトが発生する理由はまだわかりません。私が気付いたことの 1 つWebSocketClient
は、WebSocketBaseClient
.