現在、websockify / websocket.pyは、「numpy」が使用できない場合に警告を表示します。
警告:「numpy」モジュールがありません。HyBiプロトコルが遅いか無効になっています
これはやや紛らわしいです。 まず第一に、HyBiは間違いなく「無効」ではありません。 そして、それは本当に遅いですか? 私はnoVNCでいくつかのテストを行いましたが、高フレームレートでYoutubeビデオを再生する場合でも、websocket.pyを使用するプロセスはCPUをまったく消費しません。 「トップ」リストに表示されることはめったにありません。 だから私は疑問に思っています、これについて実際の測定は行われていますか? グーグルを実行しましたが、何も見つかりませんでした(numpyの問題を除く...)。 私見ですが、numpyが大きな違いを生むことを測定できない限り、標準のPython機能のみを必要とする方がより適切でクリーンだと思います。
「遅いまたは無効な」部分は、オプションであり、websocket.pyの上部に同じコードを使用してチェックされる4つの異なるPythonモジュールがあるためです。 たとえば、sslモジュールが見つからない場合、TLS / wssは無効になります。 これを明確にする変更をプッシュしました。
Numpyは間違いなく高速です。 tests /latency.pyとtests / latency.htmlテストを使用すると、次の結果が得られます(10ミリ秒の送信遅延があり、ローカルホストで実行されているだけです)。
パケットサイズ2000バイト:
パケットサイズ20000バイト:
パケットサイズ100000バイト:
さらに、100kbのパケットサイズでは、遅延がnumpyなしで6倍以上になるだけでなく、サーバーが遅れ始め、クライアントはテスト中に繰り返しバックオフする必要があります。
numpyは実際にはクライアント->サーバーデータのマスキング解除にのみ影響するため、noVNCのような用途では基本的に無関係であることに注意してください。 ただし、websockifyはnoVNC専用ではないため、クライアントがサーバーに大量のデータを送信している場合、numpyを使用するとパフォーマンスが大幅に向上します。
ありがとう!
最も参考になるコメント
「遅いまたは無効な」部分は、オプションであり、websocket.pyの上部に同じコードを使用してチェックされる4つの異なるPythonモジュールがあるためです。 たとえば、sslモジュールが見つからない場合、TLS / wssは無効になります。 これを明確にする変更をプッシュしました。
Numpyは間違いなく高速です。 tests /latency.pyとtests / latency.htmlテストを使用すると、次の結果が得られます(10ミリ秒の送信遅延があり、ローカルホストで実行されているだけです)。
パケットサイズ2000バイト:
パケットサイズ20000バイト:
パケットサイズ100000バイト:
さらに、100kbのパケットサイズでは、遅延がnumpyなしで6倍以上になるだけでなく、サーバーが遅れ始め、クライアントはテスト中に繰り返しバックオフする必要があります。
numpyは実際にはクライアント->サーバーデータのマスキング解除にのみ影響するため、noVNCのような用途では基本的に無関係であることに注意してください。 ただし、websockifyはnoVNC専用ではないため、クライアントがサーバーに大量のデータを送信している場合、numpyを使用するとパフォーマンスが大幅に向上します。