ここで「yes or no cuz I」と答えるだけの答えをそのまま受け入れないでください。実際に直面する必要のないUDPの問題と戦うことになります。
ここでの他の答えはどれも、これを証明する明白な方法を述べていません。
いくつかの簡単な事実を取ります
- IPヘッダーは、使用するプロトコルに関係なく20バイトです。
- UDPヘッダーは4バイトです
- TCPヘッダーは20バイトです
したがって、1バイトのメッセージを回線に送信するたびに、IPヘッダーも必要であると想定して、プロトコルに応じて25または41バイトを実際に送信しました。
ソース:
私のアドバイス
クライアントとサーバーの相互作用が必要な状況を考えて、クライアントの数を見積もり、2の間で実際に送信するデータに基づいて計算を行います。
例
ゲームの更新ごとに1バイトのメッセージを10個送信し、約60 fpsを更新するため、実際のメッセージデータと関連ヘッダーの60 * 10 = 600バイト/秒を送信する必要があるとします。
ゲームに応じて、すべてを単一のメッセージとして送信できるため、TCPレイヤーからのオーバーヘッドはわずか40バイト(事実上、UDPの1秒あたり20バイトのコスト)であり、そのオーバーヘッドがないと、600バイトの潜在的なコスト(メッセージストリーム全体を再送信する必要があるためです)。
ただし、すべてのメッセージをすぐに送信できるようにすることが非常に重要な場合、600メッセージ(600バイトも)+ 40 * 600 = 24kのTCPオーバーヘッドまたは1秒あたり〜14kのUDPオーバーヘッド+ 600バイトのメッセージデータ。
繰り返しますが、これらのメッセージはどれほど重要であり、どのくらいの頻度で発生するのでしょうか。また、オーバーヘッドを削減するために何らかの方法でバッチ処理できますか?
それは単なるシングルバイトメッセージの束に基づいています。通常、あなたは非常に異なることをしますが、送信される生データを知らずに、UDPよりもTCPがあなたの状況に適している場合、どちらの方法でも証明するのは難しいです。
だから、それは動作しますか?
まあ、典型的なfpsがあり、位置が重要である場合(不正や誤った決定を避けるため)、ネットワークストリームが実現可能であることを知っておく必要がありますが、各プレーヤーはそれぞれ24k +メッセージバイトをストリーミングしますs + messages)...これは、サーバーを介して各クライアントから他のすべてのクライアントにフレームごとに少なくとも1つのメッセージを送信することに基づいた個々のヘッダーのための約10mb / sのブロードバンド回線です。
サーバーとクライアントをそのように動作するようにコーディングしないことは明らかであり、ほとんどの場合、メッセージサイズはフレームあたり1バイトよりもはるかに大きく、おそらく少し少ない可能性が高いため、現実の世界を見ずに言うのは困難です「これは送信する必要があるデータです」の例。
私の場合
私の場合、合理的なオーバーヘッドであると呼びましたが、これはメッセージストリームをどのように構築するかに基づいているため、一部の設計に比べて大きなオーバーヘッドはありません。
TCPは正常に動作し、スケーラブルなMMOサーバーとクライアントフレームワークがありますが、呼び出しをバッチ処理できるので、大量のデータを大量にストリーミングしたり、大量の小さなパケットをストリーミングしたりする必要はありません。
他の人のために:TCPはちょうどしません、そして、彼らはUDPだけを使うことができます、しかし、彼らが得るものについて彼らに保証を与えないことを受け入れなければなりません(順序/到着保証)。
その他の考慮事項
コーディングが不十分なゲームエンジンの多くはCPUのメインスレッドのすべてを処理するため、CPUにはネットワークコードの処理に非常に短い時間しか与えられないことが多く、サーブとクライアントの適切な実装は完全に非同期であり、プッシュとバッチでメッセージをプルします。
いくつかの優れたネットワークライブラリがありますが、ここに見られるように、多くの人はUDPが「ちょうど良い」という意見を持っているようです。まず自分のニーズを考慮し、そうではないかもしれません。同じライブラリのUDPバリアントと比較して、TCPのセットアップが適切にコーディングされていない可能性があります(これを見て、ロードテストで証明されたと言っています)。
最初に送信するデータの技術ベースを構築してテストし、その後、数学を実行してスケールアップし、最悪の場合はクラウドに展開して負荷テストを行い、50台のコンピューターでテストクライアントを実行して処理できるかどうかを確認しますゲームごとに32人のプレイヤーの制限(または制限がある場合)。