1

私は、自分のゲーム開発サイド プロジェクト用に独自のネットワーク エンジンを作成する作業を行ってきました。これには、信頼できないメッセージ、信頼できるメッセージ、および順序付けされた信頼できるメッセージを持つオプションが必要です。ただし、信頼できるプロトコルと順序付けられた信頼できるプロトコルに必要なすべてのメカニズムを特定できたわけではありません。

UDP を介した信頼性の高いレイヤーに必要なメカニズムは何ですか? 追加の詳細をいただければ幸いです。

これまでのところ、これらが要件であることがわかりました。

  • 受信したメッセージをシーケンス番号で確認します。
  • 再送信時間が経過した後、未確認のメッセージを再送信します。
  • 適切な再送信時間を計算するために、各宛先の往復時間を追跡します。
  • 重複パケットを特定して削除します。
  • オーバーフローするシーケンス番号を処理します。

これは私のアーキテクチャに影響を与え、シーケンスとタイムスタンプを含む信頼性の高いメッセージ ヘッダー、受信したシーケンスとタイムスタンプをエコーする確認応答メッセージ、アドレスに基づいて適切な再送信時間を追跡するシステム、および a) メッセージを受信して​​ユーザーが受信できるようにキューに入れるスレッドを備えています。 、b) 信頼できるメッセージを確認し、c) 再送信タイマーの期限が切れた未確認メッセージを再送信します。

注: 信頼できる UDP は TCP と同じではありません。注文された信頼できる UDP でさえ、TCP と同じではありません。私は、本当に TCP が必要であることを密かに認識していません。また、誰かがセマンティクス ゲームをプレイする前に、はい...信頼できる UDP は「矛盾した表現」です。これは、信頼性の高い配信を実現する UDP 上のレイヤーです。

4

3 に答える 3

2

この質問に対する回答を確認することをお勧めします。信頼できるUDPが必要な場合は何を使用しますか?

私はあなたのリストに「フロー制御」を追加します。取得するラウンドトリップ時間に応じて、特定のリンクで送信するデータの量を制御できるようにする必要があります。そうしないと、リンクがフラッディングしてデータグラムが破棄されます。

于 2011-02-20T08:41:46.373 に答える
1

全体的なプロトコルによっては、再送信タイマーを省略できる場合があることに注意してください。たとえば、Quake 3 ネットワーク プロトコルを参照してください。

Q3 では、ack が確認されるまで、信頼できるパケットが単純に送信されます。

于 2013-07-31T13:37:45.993 に答える
0

なぜTCPを再発明しようとしているのですか? 最初に述べたすべての機能を提供し、うまく機能することが示されています。

編集 - コメントは、最初に述べられていない追加の要件があることを示しているため、単一のアプリケーション層プロトコルでこれらの基準をすべて満たそうとするよりも、複数のソケットを使用するハイブリッド モデルの方が優れているかどうかを検討する必要があります。

実際、本当に必要なのはSCTPのようです。

SCTP は以下をサポートします。

  1. (バイトストリームではなく) メッセージベースの送信
  2. 単一の netsock ソケットを介した複数のストリーム
  3. パケットの順序付きまたは順序なしの受信

... SCTP ではメッセージの順序はオプションです。受信アプリケーションは、メッセージが送信された順序ではなく、受信された順序でメッセージを処理することを選択できます。

于 2011-02-19T22:53:48.810 に答える