5.6 실제 레이턴시 줄이기
지금까지 우리는 주어진 레이턴시에서 어떻게 최대한 원활하게 멀티플레이를 할지 살펴보았습니다. 가능하면 실제 레이턴시를 줄이는 것이 중요한데, 어떤 방법들이 있는지 알아봅시다.
TCP 대신 UDP를 사용하는 것도 한 방법입니다. 인터넷 통신에서 가끔 발생하는 패킷 유실 상황에서 TCP는 패킷 재전송을 위한 지연 시간이 발생합니다. 그러나 UDP 패킷 유실 상황에서 재전송을 위한 지연 시간은 생기지 않습니다. 물론 UDP 데이터그램 유실은 피할 수 없습니다.
캐릭터 이동 메시지는 1초에 여러 번 계속해서 전송되는 종류의 메시지입니다. 이 중에서 패킷 유실이 발생한다고 하더라도 이어서 오는 다른 패킷 때문에 패킷 유실로 발생하는 캐릭터 위치의 오차는 금방 극복됩니다. 이러한 종류의 메시지에는 UDP가 적합합니다. 여기서 TCP를 사용하면 패킷 유실이 발생할 때마다 캐릭터 움직임이 튀는 현상(stutter)이 일어납니다.
똑같은 양의 데이터를 보낸다고 하더라도 가급적 적은 수의 패킷으로 보내는 것이 좋습니다. 예를 들어 1초에 메시지를 100개 이상 보낼 때는 뭉쳐서(coalescence) 보내면 더 효과적입니다. 무선 인터넷의 CSMA 알고리즘(2.5절 참고)으로 발생하는 지연 시간을 줄이기 때문입니다. 그렇다고 너무 뭉치면 기다리는 시간 자체가 네트워크 지연 시간처럼 느껴집니다. 필자 경험상 이 뭉치는 시간은 10밀리초 이하가 적당합니다.