클라이언트 측 리소스 활용: 서버와 클라이언트 간 불필요한 메시지는 주고받지 않는 것이 좋습니다. 가령 게이머에게 보여지는 퀘스트의 경우 퀘스트 문자열을 모두 보내주는 것보다는 게임 클라이언트에 미리 저장된 리소스를 보여주는 것이 좋습니다. 이 같은 방법을 통해 서버와의 통신량을 줄이고 게임의 응답 속도를 향상시킬 수 있습니다.
추측 항법 (Dead Reckoning): 추측 항법을 사용하면 주고받는 메시지 개수를 줄이는 데 도움이 되며, 추측 항법의 대략적인 공식은 P: 예측한 위치, V: 받은 속도, T: 레이턴시, PO:받은 위치 값들을 가지고 P = (V * T) + PO의 공식을 이용해 캐릭터의 위치를 예측할 수 있지만, 계산된 위치 값을 렌더 하면 캐릭터의 위치가 뚝뚝 끊기는 문제점이 발생합니다. 이 문제를 해결하기 위해 ProudNet에서는 게임 캐릭터의 자연스러운 위치 표현을 위해 추측 항법을 위한 도구를 제공하고 있습니다. 이 도구를 활용해 움직이는 타겟의 위치까지 제한 시간 안에 도착하도록 추적자(follower)를 이동시키는 역할을 합니다. 특히 움직이는 타겟 위치를 직선으로 추적할 수 있도록 만들어져 있어, 다른 호스트들의 캐릭터 위치가 튀는 현상이 줄어들게 됩니다.
데이터 양자화: 데이터 양자화는 1개의 메시지 크기를 줄이는 데 도움이 되며, 부동소수점 단위의 큰 값을 네트워크로 주고받을 때, 패킷의 양을 줄이는 트릭이 가능한 상황이 있습니다. 캐릭터의 위치 x 값이 100 ~ 200 (예시 값) 사이에서만 결정되고 소수점 줄째자리 이하의 정밀도는 무시되어도 될 정도라면, 이 값은 100 * 100 이하의 값으로 변환해서 주고받을 수 있으며 double(8바이트)를 word(2바이트)로 절약하게 됩니다. 이러한 트릭을 양자화(quantization)라 지칭하며, ProudNet은 해당 양자화 기능을 제공하고 있습니다. 양자화의 반대 급부 기능 또한 제공하고 있습니다.
2. 멀티캐스트 최적화
한번에 여러 호스트에게 동일한 메시지를 보내는 것을 멀티캐스트라고 부릅니다. RMI를 통한 멀티캐스트 시에는 한 번의 RMI 함수 호출로 여러 호스트에 동시 전송하는 것이 성능적으로 유리합니다. 특히, IDC와 같은 서버 운영 환경에서는 회선 속도가 큰 영향을 미치므로 이를 고려해야 합니다.
NPC 시뮬레이션 결과를 멀티캐스트 하기 일반적으로 NPC(Non Player Character)의 시뮬레이션은 서버에서 이루어집니다. 이후 서버는 NPC 시뮬레이션의 결과를 클라이언트들에게 멀티캐스트 하되, 각 클라이언트가 연계되어 있는 P2P 연결을 활용하여 P2P간 통신하는 방식 등 을 이용하면 서버에서 발생될 수 있는 트래픽을 줄일 수 있습니다.
PC 시뮬레이션 결과를 멀티캐스트 하기 일반적으로 PC(Player Character) 시뮬레이션은 각 클라이언트에서 이루어집니다. 이후 클라이언트는 PC의 위치와 속도 정보 등을 서버로 전송하고, 서버는 해당 정보를 받아 PC 주변에 있는 클라이언트들에게 멀티캐스트 합니다. 그러나 ProudNet의 매우 빠른 P2P 생성, 파괴, 증원, 감원을 활용하면 각 PC(Player Character)의 위치 멀티캐스트를 서버를 경유하지 않고, 각 클라이언트의 PC를 가시 영역에 있는 다른 클라이언트들에게 P2P 통신으로 직접 전송할 수 있습니다.
📥P2P 통신 전송방법
일정 시간마다 각 PC의 가시 영역을 두고있는 클라이언트끼리 P2P 그룹을 맺습니다.
각 클라이언트는 시뮬레이션하는 PC의 위치, 속도 등을 서버와 P2P 그룹이 맺어진 클라이언트들에게 전송합니다.
서버가 받은 정보를 근거로 서버는 P2P 그룹 생성, 파괴, 증원, 감원을 지속적으로 합니다.