Packet Loss Notification
1.0.0
このプロジェクトは、失われた信頼性の低いパケットを検出および通知するためのヘルパー クラスを提供します。これは、多くの高度な同期戦略の重要な部分です。たとえば、結果整合性はこれを使用します。
簡単にするために、サーバーは 1 つのクライアントのみをサポートします。
概要 |
---|
検出は、送信された各パケットにヘッダーを追加することで機能します。
ushort
ローカル シーケンス IDushort
最後のリモート シーケンス IDuint
32 個の以前のリモート シーケンス ID のビットマスクワークフローは次のようなものです。
AddPeer
呼び出すAddHeaderForPeerId
呼び出すEnqueueData
ReadHeaderOfPeerId
呼び出します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 (ネットワーキングの達人) は大いに助けてくれました。