Packet Loss Notification
1.0.0
이 프로젝트는 손실된 신뢰할 수 없는 패킷에 대한 감지 및 알림을 위한 도우미 클래스를 제공합니다. 이는 많은 고급 동기화 전략에서 중요한 부분입니다. 예를 들어 최종 일관성에서는 이를 사용합니다.
단순화를 위해 서버는 클라이언트를 하나만 지원합니다.
개요 |
---|
탐지는 전송된 각 패킷에 해당 헤더를 추가하여 작동합니다.
ushort
로컬 시퀀스 IDushort
마지막 원격 시퀀스 IDuint
비트마스크작업 흐름은 다음과 같습니다.
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 감지기의 경우 할당된 메모리를 해제합니다. 해당 피어 ID에 대해 시퀀스 ID가 lastSequenceId보다 크면 True를 반환합니다.ushort peerId, PacketData data
) - 해당 피어에 대해 추적된 패킷 대기열에 데이터를 넣으려고 시도합니다. 대기열이 이미 가득 차 있으면 False를 반환합니다. 아마도 너무 오랫동안 다른 피어로부터 패킷을 받지 못했을 것이므로 해당 피어의 연결을 끊어야 합니다.BitBuffer data
) - BitBuffer에서 헤더를 지웁니다. LOSS_DETECTOR_DEBUG
기호가 있으면 해당 메서드도 사용할 수 있습니다.
StringBuilder builder
) - 각 PeerId에 대한 버퍼의 전체 상태를 StringBuilder에 씁니다.ushort peerId, StringBuilder builder
) - 해당 PeerId에 대한 버퍼 상태를 씁니다. 도우미 자체는 전송에 구애받지 않지만 예제 프로젝트에서는 ENet을 사용합니다.
fholm - 네트워킹의 대가 - 많은 도움을 받았습니다.