メッセージのカテゴリ
メッセージのカテゴリ
Microsoft® DirectPlay® プロトコルは、以下の 2 種類の基本的なネットワーク メッセージングを処理するようになっている。
- 高信頼性と低信頼性メッセージング。 ターゲット アプリケーションへのメッセージの確実な配信を保証するかどうかが異なる。
- シーケンシャルと非シーケンシャルメッセージング。 送信されたときと同じ順序で、メッセージがターゲットに届くかどうかが異なる。
ゲームでは、さまざまな目的でメッセージングが使われ、個々の要求も多様である。メッセージングへのこの広範な要求に対応するため、DirectPlay プロトコルでは、メッセージを以下の 4 つのカテゴリに分類できる。
- 高信頼性でシーケンシャル
- 低信頼性でシーケンシャル
- 高信頼性で非シーケンシャル
- 低信頼性で非シーケンシャル
DirectPlay プロトコルでは、メッセージごとにカテゴリを割り当てて、メッセージング方法を最適化することができる。
高信頼性メッセージングと低信頼性メッセージング
メッセージは伝送の過程で失われることがある。高信頼性メッセージングでは、すべてのメッセージがターゲットに届くことが保証される。データの損失が許されないときは、この種類のメッセージングが必要になる。高信頼性メッセージングの多くのスキームでは、ターゲットに対して各メッセージの受信確認を求める。指定されたタイムアウト時間内に受信確認が届かない場合、差出人はメッセージを再送信する。通常、メッセージが届いたことを示す受信確認を差出人が受け取るまで、この手順が繰り返される。
DirectPlay プロトコルでは、再送信の回数に上限が設定されている。再送信をある程度繰り返しても受信確認が届かない場合、DirectPlay は接続が失われたものと見なし、接続を閉じる。
低信頼性メッセージングは、最も簡単な形のネットワーク通信である。メッセージがターゲットに配信されることを保証しないため、高信頼性メッセージングより高速で通信できる。差出人がメッセージを送信する。ターゲットにメッセージが届かない場合、差出人はメッセージを再送信せず、パケットは失われる。
低信頼性メッセージングは、主に、メッセージが失われないことより速度または帯域幅を優先する場合に使われる。たとえば、高帯域幅のストリーミング メディア アプリケーションでは、低信頼性メッセージングを採用することが多い。これらのアプリケーションでは、帯域幅を受信確認や再送信に充てる余裕がなく、失われたメッセージの再送信を待つこともできない。メッセージがときどき失われることは、品質にほとんど影響しないことが多く、無視しても問題ない。
シーケンシャル メッセージングと非シーケンシャル メッセージング
メッセージは特定の順序で差出人の手を離れる。ただし、送信されたときと同じ順序でメッセージがターゲットのコンピュータに届くという保証はない。たとえば、メッセージが失われて再送信が必要になった場合、通常、そのメッセージは元の順序で後ろにあったメッセージより後に届く。
シーケンシャル メッセージングでは、メッセージに埋め込まれた順序情報を使って、メッセージが正しい順序でターゲット アプリケーションに渡される。ターゲット アプリケーションがメッセージを正しい順序で受信しなければならないときには、この種類のメッセージングが必要になる。順序どおりでないメッセージは、欠けているメッセージが届くまでバッファに置かれる。
非シーケンシャル メッセージングでは、メッセージが、送信された順序に関係なく、ターゲット コンピュータに届くと同時にターゲットに渡される。非シーケンシャル メッセージングは、欠けているパケットを待つ必要がないので、メッセージが順序どおりに届くことより速度を優先する場合に使われることが多い。順序どおりでないメッセージは無視される。
最適なメッセージ カテゴリの選択
メッセージに適したカテゴリの選択は、マルチプレーヤ ゲームを開発するうえで中心になる問題である。DirectPlay にはメッセージングを管理するためのツールが用意されているが、メッセージ カテゴリの選択は、最終的にはメッセージの意味とゲームの性質に依存する。
最適なメッセージ カテゴリを選択するための一般的なガイドラインは、以下のようになる。
- 内容的に問題がなければ、非保証のメッセージングを使う。たとえば、プレーヤの最新位置を頻繁に送信する場合を考える。更新内容は互いに無関係であり、新しい情報は以前の情報すべてに取って代わる。更新内容が失われても、次回の更新でプレーヤのゲームの状態を維持できる。メッセージが失われ、再送信されると、後続の更新メッセージより後に届く可能性がある。
- データの損失が許されないときには、保証のあるメッセージングを使う。たとえば、テキストベースのチャット機能では、すべての文字をそのターゲットに配信する必要がある。
- メッセージの順序が重要なときには、シーケンシャル メッセージングを使う。たとえば、ストリーミング メディア アプリケーションでは、通常、シーケンシャルの低信頼性メッセージングを採用する。メッセージがときどき失われることは許されるが、メッセージが順序どおりに届かないと問題が起きる可能性がある。