Packet Loss Notification
1.0.0
該專案提供了一個幫助程式類,用於檢測和通知遺失的不可靠資料包。這是許多高階同步策略的重要組成部分。例如,最終一致性就使用它。
為簡單起見,伺服器僅支援一個客戶端。
概述 |
---|
檢測的工作原理是將該標頭添加到每個發送的資料包中:
ushort
本地序列 IDushort
最後一個遠端序列 IDuint
32 個先前遠端序列 ID 的位元遮罩工作流程是這樣的:
AddPeer
AddHeaderForPeerId
EnqueueData
ReadHeaderOfPeerId
ExecuteLostPackets
ClearHeader
RemovePeer
如果資料包被視為遺失,則表示它很可能已遺失。當資料包被視為已到達時,則確定已到達。
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 偵測器的情況下,將釋放分配的記憶體。如果該peerId 的sequenceId 大於lastSequenceId,則傳回True。ushort peerId, PacketData data
) - 嘗試將資料放入該對等點的追蹤資料包佇列中。如果佇列已滿,則傳回 False。也許您已經太長時間沒有收到來自另一個對等點的資料包,應該斷開他的連線。BitBuffer data
) - 從 BitBuffer 中清除標頭。如果存在LOSS_DETECTOR_DEBUG
符號,則這些方法也可用:
StringBuilder builder
) - 將每個peerId 的緩衝區的完整狀態寫入StringBuilder。ushort peerId, StringBuilder builder
) - 寫入該peerId 的緩衝區狀態。 Helper 本身與傳輸無關,但範例專案使用 ENet
fholm - 網路大師 - 幫了很多忙。