TOAST Haste
TOAST Haste framework is a pure java implementation of asynchronous game server framework
About
TOAST Haste 는 비동기 게임서버 프레임워크 입니다. TOAST Haste 를 이용해서 개발하면 아래와 같은 장점을 얻을 수 있습니다.
- 다양한 QoS 제공
- Multiplexing
- Wi-Fi Cellular handover
- 선택적 암호화 (using Diffie-Hellman algorithm, and AES)
다양한 QoS 제공
UDP는 기본적으로 Best effort로 동작합니다. 즉, Port로 애플리케이션을 구분해주는 것 이외는 아무런 일을 하지 않습니다. 따라서 패킷 순서 보장 및 재송신을 구현해야 합니다. TOAST Haste는 패킷 순서를 보장 및 재송신에 대한 구현이 되어 있으며, 아래와 같은 QoS를 제공하고 있습니다.
- Reliable sequenced : 패킷 순서를 보장하고 유실시 재송신을 수행합니다.
- Unreliable sequenced : 유실시 재송신은 보장하지 않지만, 최신의 패킷 순서를 보장합니다. 패킷 유실시 재송신은 필요 없지만, 최신의 데이터가 유효해야 하는 경우 사용됩니다. (예. 플레이어의 위치 정보)
- Reliable fragmented : IP 계층의 파편화를 막기 위해서 미리 MTU 사이즈만큼 잘라서 송수신합니다. 큰 데이터 송수신에 유용하게 사용할 수 있습니다.
TOAST Haste 의 QoS 구현은 ENet(MIT License)과 TCP 구현 일부를 바탕으로 개발되었습니다.
Multiplexing
TOAST Haste 는 논리적인 Channel을 지정해서 송수신할 수 있도록 설계되었습니다. Channel 별로 처리가 수행되기 때문에, 데이터를 역할에 따라 적절하게 Channel 별로 나눠서 송수신할 수 있습니다. 적절한 Channel 분산은 HOL blocking 문제를 최소화시킬 수 있습니다.
Reliable sequenced(혹은 Reliable fragmented) QoS로 송수신할 경우, 패킷 유실시 Channel 별로 HOL blocking 문제가 발생합니다.
따라서 도메인별로 적절한 채널 분배가 필요합니다.
Wi-Fi Cellular handover
TCP의 경우 연결기반이기 때문에 Source IP, Source Port, Destination IP, Destination Port 4가지 정보를 이용해서 하나의 연결을 식별합니다. 따라서, Wi-Fi와 Cellular 이동 시 망이 변경되어 IP가 바뀌면 새로운 연결을 시도해야 합니다. TOAST Haste는 자체 식별번호로 연결을 관리하고 있으므로 IP가 변경되어도 재연결 없이 연결이 유지됩니다.
선택적 암호화
게임뿐만 아니라 모든 애플리케이션에서 중요한 데이터들의 암호화는 필수입니다. 하지만 게임의 경우, 모든 패킷을 암호화하면 실시간성을 보장하기 힘들어지기 때문에 필요에 따라 암호화를 수행해야 합니다. TOAST Haste 는 연결 성립 시, 암호화에 대한 사전정보를 주고받습니다. 이후에는 사용자가 필요할 때마다 암호화를 수행할 수 있습니다. 참고로 TOAST Haste는 키교환에 Diffie-Hellman Algorithm을, 데이터 암호화에는 AES256을 사용 중입니다.