gafferongames.comへのコメントからのSam Jansenによる引用は次のとおりです。
ゲーム開発者ではなくネットワーク研究者として話すと、TCPとUDPを一緒に使用しないという結論は少し強いようです。TCPは、送信するデータが多すぎる場合にのみパケット損失を引き起こします。送信しているUDPデータと同じようにいくつかの方法で。違いは、TCPが送信する速度を直接制御できないことです。これはあなたには隠されています。
信頼できるデータを送信する必要があるだけで、再送信や信頼できるプロトコルの実装について心配したくない場合、レートが低くなることがわかっていれば、TCPとUDPの両方を使用しても問題はありません。
2つの関係はそれほど複雑ではありません。TCPは、パケット損失が発生するまで送信レート(送信するデータがある場合)を増加させるだけです。時間をゆっくりと)。レートの増加によりパケット損失が発生すると、UDPパケットを含む他のデータストリームにもヒットする可能性が高くなります。
紙のUDPパケット損失の特性:TCPトラフィックの影響は、一度に複数のTCP接続を開き、ネットワークにデータをフラッディングすることで結果を得ました。これにより、輻輳に続いてグローバル同期が発生します。どちらもパケットのドロップを引き起こします。明らかに、ゲームクライアントは一度に数十の接続を開き、ネットワークでデータをフラッディングしないため、結果は異なります。
あなたの質問に答えるには:
TCPとUDPの両方を同時に使用するのは理にかなっているのでしょうか。
はい、これは、帯域幅の制限内にいることを前提として行うには許容できることです。
- まれに送信されるが、確実に到着することが保証されている情報を送信するためのTCP。スコアの更新、プレーヤーの名前、ゲームの世界でのライトのオン/オフの状態など。
TCPとUDPの両方を使用する場合は、常にUDPを介してできるだけ多く、TCPを介してできるだけ少なく送信することを優先する必要があります。
さて、私はあなたにこれを尋ねます:スコア、プレーヤーの名前、およびTCP上のライトの状態を送信することは本当に必要ですか?このデータを最終的に受信する必要があるのは本当ですが、このデータを厳密に順序正しく正確に1回受信する必要があるのは本当ですか。
おそらく違います。
UDPはこれらの場合に問題なく機能し、Quake 3はその良い例です。
では、UDPと一緒のTCPの良い例は何でしょうか。さて、ゲームのチャットボックスを考えてみてください。このチャットボックスへの更新(つまり、テキストの新しい行)は、確実かつ順序どおりに送信する必要があります。したがって、TCPが適しています。