JavaScript と PHP の WebSocket TCP パケット クランピングについて、以下に例を示します。
何らかの理由で、VPS でパケットをすばやく送信したり、IP アドレスを指すドメインを介してローカルホストにアクセスしたりすると、複数のパケットがまとまってしまいます。この例では、毎秒 20 (@100byte) パケットをストリーミングしようとしています。サーバー側では、それらは確かに一定の速度で、正確に 50 ミリ秒ごとに送信され、1 秒あたり 20 になります。ただし、クライアントに到達すると、クライアントは約 1/4 秒ごとに新しいメッセージのみを処理します。新しいパケットが 1 秒あたり 4 程度の割合でしか受信されない...
このパケットの凝集の原因は何ですか? この問題は、すべてが localhost を介している場合には発生しません。さらに奇妙なのは、iPhone の iOS Mobile Safari で問題なくスムーズにストリーミングされることです。しかし、PC Safari ではまったく動作しません (古い Hixie-76 WebSocket フォーマットで正しく動作するようにこれを設定していないため、Mobile Safari は既に新しい RFC 6455 または新しい JavaScript を使用していると想定しています)。コンパイラ) 複数のホスティング会社を試しましたが、毎回まったく同じ結果が得られました。
InMotion の VPS でホストされている以下の例を参照してください: http://www.hovel.me/script/serverControl.php
(左側の [接続] をクリックし、右側の [ゲームを表示] をクリックします)。
現在受信されているパケットは、1/4 秒ごとに 5 つのパケットが一度に受信されるため、毎回約 5 ずつジャンプします。ただし、パケットの一定の高速ストリームを送信できる例を見てきました。この凝集/パケットが互いに待機する原因は何ですか?
編集: これは、小さなパケットを収集して一緒に送信するNagle のアルゴリズムと関係があるのでしょうか? PHPでこれをバイパスしようとします。この TCP_NODELAY を PHP で設定しても、問題は解決しません。iPhone では機能するのに PC では機能しないのはなぜ
ですか? クライアント側の基本的な JavaScript の方法が必要です。
node.jsを使用せずに、node.jsの「 socket.setNoDelay(true) 」を複製する機能を持たせるにはどうすればよいですか?