自分が取り組んでいるゲームがあり、UDPはリアルタイムゲームよりも優れていると聞きました。私はsocket.ioがTCP=を使用していることを知っており、UDPに切り替える方法があるかどうか疑問に思っていました。調べてみましたが、UDPは実験的なものだと言っている2012年頃の投稿しか見つかりませんでしたブラウザ。
標準ブラウザからはできません。
ブラウザークライアントから、socket.io
はhttp
またはwebSocket
トランスポートを使用します。 http
とwebSocket
はどちらもTCP接続であり、UDP接続ではありません。したがって、ブラウザクライアントのsocket.ioはUDPを使用せず、TCPを使用します。
私が知っているように、通常のHTMLページのJavaScriptからアクセスできるブラウザーには標準のUDPサポートがないため、UDPを使用する独自のレイヤーを実際に構築することすらできません。
トピックに関するその他の参照:
chrome拡張機能を記述して、ブラウザでUDPをサポートする
WebでUDPパケットを送信する方法RTC-Javascript?
UDPは、パケットをできるだけ早く配信する必要がある状況では望ましいトランスポートですが、すぐに配信できない場合はドロップするだけです。これは、次のパケットに次の更新のみが含まれるゲームまたはビデオストリーミングで役立つ場合があります。そのため、前のパケットが届かなかった場合、大した問題ではなく、TCPで再送信を試みないでください。失われたパケット。ただし、ブラウザは、WebページのJavaScriptからのUDPプロトコルの使用をサポートしていません。
ブラウザーからUDPデバイスまたはサーバーに接続する場合は、ブラウザーコードがTCP(httpまたはwebSocketのいずれか)経由でプロキシと通信できるように、プロキシを使用する必要があります。デバイスとの実際のUDP通信を処理します。
Node.jsまたはその他の非ブラウザープラットフォームからのsocket.ioライブラリを使用して、プラットフォームのネイティブUDPサポートに基づいて構築されたsocket.io用の独自のUDPトランスポートアドインを作成することができます。 socket.ioには多少プラグ可能なトランスポートがあるので、独自のトランスポートを作成してから、そのトランスポートを使用するようにクライアントとサーバーの両方を構成することができます。これは、トランスポートを構築できる基になるUDPサポートがないため、ブラウザーからは不可能ですが、node.jsなどの非ブラウザー環境では可能です。
質問はすでに回答されていますが、UDPでsocket.ioを実装する方法があることを指摘しておきます。たとえば dgram は、まさにあなたが探しているものを実行します。
これは socket.io + UDP for dgramのチュートリアルです。
[〜#〜]更新[〜#〜]:
Alexandre Lacheze node.jsを開発 package これにより、UDPがブラウザに表示されます。また、socket.ioもサポートしています。だから今の答えはどういうわけか時代遅れです。
UPDATE 2:それは単にシミュレートされたUDPであることがわかります。ブラウザで実行されている実際のUDPプロトコルではありません。
この場合、UDPであるwebRTCを使用することをお勧めします。