私は最近、必要に応じてワールド データ、エンティティ データ、チャット データなどを更新して送信する PC 用の C# および XNA で作成している 2D シューティング ゲーム用の UDP サーバーを作成しています。
最近、プレイヤーが武器を変更する方法を作成していたときに、ある質問が頭に浮かびました。武器の変更を要求するサーバーに送信されるパケットが失われた場合はどうなりますか? この質問は、私に別の質問を考えさせました。クライアントとサーバーが特定のパケットまたはデータ ブロックの受信を確認できるようにするにはどうすればよいですか?
そのため、この問題に取り組むために、次のような単純な解決策を考え出しました。
- サーバーは確認応答を必要とするパケットを送信します。
- クライアントはパケットを受信し、確認パケットを送信します。
- サーバーは、クライアントがデータを確認したかどうかを確認します。クライアントが送信していない場合は、データを再送信します。
提案されたソリューションはかなり良さそうに見えますが、確認応答パケットが失われたり、意図しないことが起こったりした場合はどうなるでしょうか?
この問題のより良い解決策は、TCP と UDP を使用するサーバーとクライアントを作成することです。TCP はそこに到達し、順番に/1 つの平和で到達する必要があるデータに使用され、UDP はそこにすばやく到達する必要があり、損失やエラーに対処できるデータに使用されますか?
TCP/UDP サーバーとクライアントがより適切な選択である場合、どのようなリスクがあり、それを実装するにはどうすればよいですか?
ありがとう。