送信の優先順位付け
送信の優先順位付け
メッセージの重要性は、メッセージごとに異なる。あるメッセージはタイム クリティカルで、できる限り速く配信しなければならない。また、あるメッセージは、必要に応じて遅らせることができ、送信が不要である可能性もある。混雑の制御アルゴリズムの 1 つの問題は、アプリケーションがメッセージを作成する速度が、送信可能な速度を上回る場合である。このような場合には、流出用のスロットが開くまで、未送信のメッセージをキューに保存する必要がある。未送信のメッセージをすべて単独の未処理メッセージ キューに保持すると、優先度の低いメッセージが先に送信されるまで、優先度の高いメッセージがブロックされる可能性がある。
Microsoft® DirectPlay® プロトコルは、3 つの未処理メッセージ キューを用意することによって、この問題を解決する。それらは、低、通常、高の 3 つの優先順位である。送信済みメッセージ キューのスロットが開くと、次に送信すべきメッセージが次のように選択される。
- 高優先度キュー内で最も古いメッセージを送信する。
- 高優先度キューにメッセージがない場合は、中優先度キュー内で最も古いメッセージを送信する。
- 中優先度キューにメッセージがない場合は、低優先度キュー内で最も古いメッセージを送信する。
この優先度メカニズムにより、優先度が低いメッセージが既に発行されていても、タイム クリティカルなメッセージをできる限りすばやく処理できる。
注 すべての DirectPlay Voice メッセージは中優先度で送信され、タイムアウト値は 1.5 秒である。Voice トラフィックが優先してはならないメッセージは、高優先度で送信する必要がある。
送信のタイムアウト
スロットリングの 1 つの結果として、特に優先度が低い場合に、メッセージが未処理メッセージ キュー内に長時間保持されることがある。場合によっては、メッセージが長時間保持されているうちに、そのメッセージに取って代わる後続メッセージが届くことがある。これらのメッセージは、もう不要である。たとえば、プレーヤの最新位置を示すメッセージを周期的に送信する場合を考える。更新内容は互いに無関係であり、最新の情報は以前の情報に取って代わる。未処理メッセージ キュー内にプレーヤの最新位置が 2 つある場合、送信する必要があるのは最も新しいものだけである。
DirectPlay プロトコルでは、省略可能のタイムアウト値をメッセージに追加することで、古いメッセージの問題に対応できる。タイムアウト時間が過ぎたときに、まだ未処理メッセージ キューに保持されていると、そのメッセージは取り消される。
切断
アプリケーションが切断メッセージを送信すると、そのメッセージが低優先度の未処理メッセージ キューの最後に追加され、プロトコルが流出するメッセージの受け付けを停止する。この処理により、すべての未処理メッセージがリンク切断前に送信される。切断メッセージは、高信頼性のシーケンシャル メッセージとして送信され、ターゲットに届くことが保証されているが、その前にキュー内にある他のメッセージがすべて配信される。