아직 이해하지 못했다면 https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking 및 http://fabiensanglard.net/quake3/network.php 라는 두 가지 깊고 이해하기 쉬운 기사를 읽으십시오. .
여기에는 '고정 간격'패킷 전송을 사용하도록 권장되는 이유가 설명되어 있습니다. 간단히 말해서, 실제로 서버에 의해 전송 된 패킷에 대해 중요합니다.
패킷 전송에는 고정 비용이 있으며 네트워크 패킷 최대 크기는 약 1.5KB입니다. 따라서 서버에 예를 들어 16 명의 플레이어가있는 경우 플레이어의 움직임을 계산할 때 각 프레임마다 순진 코드가 각 움직임 해결 후 각 플레이어에게 업데이트 패킷을 보낼 수 있으므로 16 * 16 = 256 패킷입니다. 프레임 속도가 30이면 7680 패킷입니다.
더 나은 방법은 프레임의 시작 부분마다 버퍼를 만들고 16 개의 계산 된 위치 업데이트를 연결 한 다음 16 명의 플레이어에게 보내는 것입니다.
이제 동일한 결과를 위해 초 단위로 480 개의 패킷 만 보냅니다.
플레이어 대 서버의 경우, 이는 같은 패킷에 최대 데이터를 전송해야 함을 의미합니다. 위치,이 프레임이라고하는 동작 등이 있습니다.
귀하의 질문의 두 번째 부분에 대해-지연 감각을 줄이기 위해 선택한 방법은 각 프레임의 서버 에이 정보를 보내는 것입니다.
플레이어의 실제 현재 위치 (서버에서 서버 측과 플레이어 측 위치가 너무 많이 동기화되지 않았는지 확인하기 위해 사용).
1 초 후 예상 플레이어 위치 : 클라이언트에서 계산 : 플레이어가 마우스 방향을 바꾸지 않고 키보드를 1 초 동안 현재 상태로두면 플레이어는 어디에 있습니까? (충돌에 대해서는 신경 쓰지 않습니다.) 플레이어가 움직이지 않으면 1 초 안에 예상 위치가 현재 위치입니다.
그가 바라본 위치.
서버가이 정보를 수신 할 때마다 미래 위치와 위치를 업데이트하고 플레이어 개체는 결국 미래 위치로 이동합니다.
플레이어는 정확히 동기화되지는 않았지만 입력 응답은 즉각적 (나에게 가장 중요)이며 정확한 위치가 나에게 정확하다는 것을 알았습니다.