Packet Loss Notification
1.0.0
このプロジェクトは、失われた信頼性の低いパケットを検出および通知するためのヘルパー クラスを提供します。これは、多くの高度な同期戦略の重要な部分です。たとえば、結果整合性はこれを使用します。
簡単にするために、サーバーは 1 つのクライアントのみをサポートします。
| 概要 |
|---|
検出は、送信された各パケットにヘッダーを追加することで機能します。
ushortローカル シーケンス IDushort最後のリモート シーケンス IDuint 32 個の以前のリモート シーケンス ID のビットマスクワークフローは次のようなものです。
AddPeer呼び出すAddHeaderForPeerId呼び出すEnqueueDataReadHeaderOfPeerId呼び出しますExecuteLostPacketsを呼び出すClearHeader呼び出すRemovePeer呼び出すパケットが失われたとみなされる場合は、パケットが失われた可能性が高いことを意味します。パケットが「Arrived」とみなされる場合、パケットは確実に到着しています。
ILossHandler.OnPacketLost失われたパケットごと、およびピアが切断されたときにキューに入れられ追跡されていたパケットごとに呼び出されます。
LOSS_DETECTOR_DEBUGシンボルが存在する場合、失われたパケット シーケンスはすべてロガーに出力されます。
ILossHandler handler, ushort maxPeerCount, ushort ackWindow ) - ILossHandlerの実装は、失われたパケットごとに呼び出されます。 MaxPeerCount - そのピアに接続されているピアの最大数。 AckWindow - ピアごとのローカル追跡パケットの最大数。ushort peerId ) - そのpeerIdのシーケンス番号をクリアします。ushort peerId ) - そのpeerIdの追跡された各パケットを紛失したものとしてキューに入れます。ushort peerId, BitBuffer data ) - そのpeerIdのBitBufferにヘッダー情報を書き込みます。ushort peerId, BitBuffer data ) - BitBuffer からヘッダーを読み取り、追跡されたパケットが ACK または NACK されたかどうかを検出します。 ACK 検出器の場合、割り当てられたメモリが解放されます。 sequenceId がそのpeerIdのlastSequenceIdより大きい場合、Trueを返します。ushort peerId, PacketData data ) - そのピアの追跡対象パケットキューにデータを入れようとします。キューがすでにいっぱいの場合は False を返します。おそらく、別のピアからパケットを長期間受信していないため、そのピアを切断する必要があります。BitBuffer data ) - BitBuffer からヘッダーをクリアします。 LOSS_DETECTOR_DEBUGシンボルが存在する場合は、これらのメソッドも使用できます。
StringBuilder builder ) - 各peerIdのバッファの完全な状態をStringBuilderに書き込みます。ushort peerId, StringBuilder builder ) - そのpeerIdのバッファの状態を書き込みます。 ヘルパー自体はトランスポートに依存しませんが、サンプル プロジェクトでは ENet を使用します
fholm (ネットワーキングの達人) は大いに助けてくれました。