UDP에 대한 질문이 있습니다. 맥락 상, 저는 실시간 액션 게임을하고 있습니다.
나는 UDP와 TCP의 차이점에 대해 꽤 많이 읽었으며 그것들을 아주 잘 이해한다고 생각하지만 결코 정확하지 않은 한 부분이 있으며 신뢰성 과 구체적으로 인정 합니다. UDP는 기본적으로 안정성을 제공하지 않는다는 것을 이해합니다 (즉, 패킷이 삭제되거나 순서가 잘못 될 수 있음). 신뢰성이 필요한 경우, 내가 본 솔루션 (개념적으로 의미가있는)은 승인을 사용하는 것입니다 (예 : 서버가 클라이언트에게 패킷을 보내고 클라이언트가 해당 메시지를 수신하면 서버에 승인을 다시 보냅니다) .
승인이 삭제되면 어떻게됩니까?
위의 예 (한 서버가 한 클라이언트에게 패킷을 보내는 경우)에서 서버는 해당 패킷에 대한 승인이 수신 될 때까지 매 프레임마다 패킷을 재전송함으로써 잠재적 인 패킷 손실을 처리합니다. 여전히 대역폭 또는 비 순차적 메시지 문제가 발생할 수 있지만 순전히 패킷 손실 측면에서 서버가 적용됩니다.
그러나 클라이언트가 도착하지 않은 승인을 보내면 서버는 해당 메시지의 전송을 중단 할 수밖에 없습니다. 따라서 해당 패킷에 포함 된 정보가 필요한 경우 게임이 중단 될 수 있습니다. 서버에 대한 비슷한 접근 방식을 취할 수 있습니다 (즉, ack에 대한 애크가 수신 될 때까지 수신 확인을 계속 보내시겠습니까?).하지만 그 접근 방식은 ack에 대한 ack에 대한 애크가 필요하기 때문에 영원히 반복됩니다. 등등).
내 기본 논리가 여기에 맞다고 생각합니다. 두 가지 옵션이 있습니다.
- 단일 승인 패킷을 보내고 최선을 다하겠습니다.
- 소수의 승인 패킷 (아마 3-4 개)을 보내고 모든 패킷이 삭제되지는 않는다는 가정하에 최선을 다하겠습니다.
이 문제에 대한 답변이 있습니까? 내가 근본적으로 오해하고 있습니까? 내가 모르는 UDP 사용에 대한 보증이 있습니까? 내 논리가 튼튼하다고 느낄 때까지 너무 많은 네트워킹 코드를 사용하는 것이 주저합니다.