多くのゲーム開発者は、アプリケーション レベルでUDPの 信頼性を高めることを選択しています。それがTCPの目的ではありませんか?UDP および TCP パケットを使用してクライアント サーバー通信を可能にする API を作成しました。信頼できる UDP をリストに追加する必要がありますか? なぜ?TCP を使用しても問題はありますか?
RUDP サポートを追加するかどうかを選択できるように、RUDPが TCP よりも優れているかどうかを知りたいだけです。
多くのゲーム開発者は、アプリケーション レベルでUDPの 信頼性を高めることを選択しています。それがTCPの目的ではありませんか?UDP および TCP パケットを使用してクライアント サーバー通信を可能にする API を作成しました。信頼できる UDP をリストに追加する必要がありますか? なぜ?TCP を使用しても問題はありますか?
RUDP サポートを追加するかどうかを選択できるように、RUDPが TCP よりも優れているかどうかを知りたいだけです。
簡単な答え: TCP はレイテンシに対して (まったく) 最適化されていません。その結果、ゲームのレイテンシ キラーであるいくつかのプロパティがあります (ただし、パケットが失われた場合にのみ機能します)。特に、ヘッド オブ ライン ブロッキングと指数関数的バックオフは、ペースの速いゲームでは非常に煩わしい傾向があります。
レイテンシーを最も悪化させるのは、ヘッドオブライン ブロッキング (別名 HOL ブロッキング) です。1 つのパケットが失われると、同じストリーム内の後続のすべてのパケットは、たとえ通信の反対側に到達したとしても、到達できなくなります。失われたパケットが再送信されるまで、アプリ レベル (痛い!) (これには約 2*RTT かかります。大陸ごとのサーバーの場合でも、約 100 ミリ秒です (=シューターでは、すでに殺されています) )))。
長い答え:
これは複雑な問題であり、いくつかの異なるシナリオを区別する必要があります。
信頼できる順序付けられたメッセージ (またはバイト) ストリームが必要です。この場合、TCP に対する RUDP の利点は存在しますが、ごくわずかです (再送信時間を短縮して、指数バックオフをなくすこともできますが、それだけです)。特に、あらゆる種類の信頼できる順序付けられたストリーム (TCP、RUDP、またはその他のもの) では、行頭ブロッキングは依然として避けられません。
信頼できるが潜在的に順序付けされていないメッセージ配信が必要です。これにより、HOL ブロッキングを回避できる場合がありますが、かなり複雑なアプリ レベルの処理が必要になります。
信頼性はまったく必要ありません (="ファイア アンド フォーゲット")。そのような情報の典型的な例の 1 つは、弾丸のヒットを表示する必要がある場合です。すぐに表示しなかった場合、0.5 秒後に表示する必要はありません。無視して、パケットの再送信にリソースを費やさない方がよいでしょう。
最終的に同期された状態が必要です(ただし、すべての中間状態を通過することは気にしません)。これは、シミュレーションの非常に一般的なシナリオです。これは、UDP を介して実装することが可能です (HOL ブロッキング ペナルティを被ることなく)。ただし、信頼性の低い接続で圧縮を有効にすることは簡単ではなく、圧縮はほとんどのゲームで必須です。幸いなことに、このような圧縮は実行可能です ( http://gafferongames.com/networked-physics/snapshot-compression/および/またはhttp://ithare.com/udp-from-mog-perspective/#low-latency-compressionを参照)。議論のために)。このアプローチが実装された場合 (完全に信頼性の低いパケットの上で実行できます)、TCP よりも大幅に改善されます (HOL ブロッキングが排除されるため、ネットワーク ティックの順序の遅延について話しているのですが、これは可能です)。 1/120sec~=8ms という低さ - RTT 前後の遅延で、これらは 1 つのパケットが失われた場合に少なくとも 100ms です)。
サイドコメント:
実際、UDP over TCP をシミュレートすることは可能です (TCP レイテンシーを排除します) - http://ithare.com/almost-zero-additional-latency-udp-over-tcp/を参照してください。ただし、それを利用するには、上記のすべてを手動で行う必要があることに注意してください。信頼性の高い順序付けされたストリームの HOL ブロッキングを回避できる特効薬はまだありません。代わりに、この手法を使用すると、複数の TCP 接続を確立して、信頼性は低いがブロックしない UDP であるかのように動作させることができます。