UDPについて質問があります。コンテキストでは、リアルタイムアクションゲームに取り組んでいます。
私はUDPとTCPの違いについてかなり読みましたが、私はそれらをかなりよく理解していると感じていますが、正しいと感じたことのない作品が1つあります。それは信頼性、特に承認です。UDPはデフォルトでは信頼性を提供しないことを理解しています(つまり、パケットがドロップされたり、順番どおりに到着しないことがあります)。ある程度の信頼性が必要な場合、私が見た解決策(概念的には理にかなっています)は、確認応答を使用することです(つまり、サーバーはクライアントにパケットを送信し、クライアントがそのメッセージを受信すると、確認応答をサーバーに送り返します) 。
確認応答がドロップされるとどうなりますか?
上記の例(1つのサーバーが1つのクライアントにパケットを送信する)では、サーバーはパケットの確認応答が受信されるまでフレームごとにパケットを再送信することにより、潜在的なパケット損失を処理します。それでも帯域幅または順序が乱れたメッセージの問題に遭遇する可能性がありますが、純粋にパケット損失の観点から、サーバーはカバーされます。
ただし、クライアントが到着しない確認応答を送信すると、サーバーは最終的にそのメッセージの送信を停止せざるを得なくなり、そのパケットに含まれる情報が必要な場合、ゲームが中断する可能性があります。サーバーに対して同様のアプローチをとることができます(つまり、ACKに対するACKを受信するまで確認応答を送信し続けますか?)等々)。
ここで私の基本的なロジックは正しいと思うので、2つの選択肢があります。
- 単一の確認応答パケットを送信し、最善を期待します。
- 少数の確認応答パケット(おそらく3〜4)を送信し、すべてがドロップされるわけではないと仮定して、最善を期待します。
この問題に対する答えはありますか?基本的に何かを誤解していますか?知らないUDPを使用する保証はありますか?私は自分の論理が健全であると納得するまで、あまりにも多くのネットワークコードを使って前進することをheします。