멀티 플레이어 게임을위한 TCP 또는 UDP? 대부분의 것은 UDP가 모든

이것은 내가 많이 보는 질문입니다. 대부분의 사람들은 UDP가 항상 실시간 게임에 TCP보다 낫다고 말합니다. 내 이해는 TCP는 상대방이 패킷을 얻을 때까지 계속해서 패킷을 다시 보내려고하지만 UDP는 신경 쓰지 않는다는 것입니다.

내가 읽은 대부분의 것은 UDP가 모든 실시간 게임에 필수적이며 TCP는 끔찍하다는 것입니다. 그러나 문제는 대부분의 사람들이 UDP 위에 어떤 형태의 TCP를 구현하는 것처럼 보입니다. 또한 우리가 더 이상 80 대가 아니고 인터넷이 이제는 매우 빠르고 안정적이라는 점을 감안할 때이 둘의 차이는 무시할 만하다고 들었습니다.

여기에 내 일반적인 이해가 잘못 되었습니까? 누군가 나를 위해 이것을 정리할 수 있습니까?



답변

피어 투 피어, 서버를 실행하는 사용자가있는 클라이언트 / 서버 또는 서버를 실행하는 데이터 센터가있는 클라이언트 / 서버에 대해 이야기하고 있는지에 따라 다릅니다. 후자의 경우에만 인터넷이 정말 빠르고 안정적입니다. 사용자의 컴퓨터가 빠르다 는 보장 은 없으며 확실하지 않습니다.

UDP를 사용하면 TCP와 같은 구현 유형을보다 효과적으로 제어 할 수 있습니다. 그것은 순서대로 패킷을 실행하고, 중요하다고 생각되는 패킷을 재 시도하면서 불필요한 것으로 간주되는 패킷을 폐기 할 수있는 유연성을 제공합니다. 그러나 이것은 필요한 경우와 필요한 전문 지식이있는 경우에만 수행해야합니다.

이러한 유연성없이 수행 할 수 있으면 TCP가 제대로 작동하여 시간을 크게 절약 할 수 있습니다. 심지어 내가 작업했던 스튜디오와 같은 전문 스튜디오조차도 UDP가 절대 필요하지 않고 네트워크 프로그래밍에 전념 하는 사람들이 있다면 TCP를 사용 합니다.


답변

@Ordous가 지적한 것처럼 “인터넷은 이제 매우 빠르고 안정적”이라고 가정하고 위험한 것입니다.

대부분의 게임에서 배달에 중요한 패킷에 대한 UDP + 사용자 정의 프로토콜이 마술처럼 작동하는 이유는 일부 패킷을 잃으면 “괜찮아”있을 수있는 시간이 있기 때문입니다 (예 : 게임 플레이를 완료하기위한 2 차 중요하지 않은 이벤트의 경우). , 커서 움직임 등과 같은 데이터를 잃어버린 “아직 괜찮지 않은”시간도 있습니다. (저는 생계를 위해 게임 개발을하지 않기 때문에 모호한 예제를 용서합니다)

UDP는 기본적으로 반복해서 푸시하는 데 시간을 낭비하지 않습니다.

그리고 많은 게임들이 우연히 “항상 실패하지 않고 전달해야하는”패킷보다 “언제나 잃어 버릴 수있는”패킷을 가지고있는 것 같습니다. 따라서이 작업에 자연스럽게 적합합니다.

UDP에 필요한 것은 “항상 실패하지 않고 항상 전달할 필요가있는”패킷을 올바르게 전달하는 데 도움이되는 사용자 지정 프로토콜을 사용하는 것입니다. 나머지 게임 데이터는 네트워크 연결의 자비에 맡깁니다.

이제 전송되는 대부분의 데이터가 어떤 종류의 트래픽으로 구성되는지 결정하면 더 나은 결정을 내리는 데 도움이됩니다.

TCP에 대한 요점은 재 시도에 소요되는 시간이 지금 중요한 패킷을 보내는 데 소비 될 수 있다는 것입니다.

전송 중에 문제가 발생하면 TCP가 사용자를 위해 더 세분화 된 게임 플레이 시나리오로 캐스케이드하여 UDP + 커스텀 스택과 비교하여 경험을 망칠 수 있습니다 (이 마지막 부분은 직감입니다. 이것에 대해 다른 전문가들에게 의견을 말하십시오.이 시나리오의 가능성에 대해 배우고 싶습니다.)