ProudNet 기능
Last updated
Last updated
데이터 통합(Coalesce) 같은 양의 메시지를 여러 번 조금씩 보내는 대신, 동시에 수집된 데이터를 한 번에 전송하고 고유 ID를 추가 적용하면 네트워크 트래픽을 줄일 수 있습니다.
분할(Fragmentation) MTU를 고려하여 메시지를 나눠 보낼 수 있습니다.
혼잡 제어(Congestion control) 과도한 UDP 통신은 네트워크 혼잡을 일으킬 수 있습니다. ProudNet은 이를 방지하기 위해 UDP 혼잡 제어 기능을 제공합니다.
안정적인 신뢰할 수 없는 메시지 프로토콜 게임에서는 UDP가 신뢰할 수 없지만 트래픽이 적고 빠르기 때문에 캐릭터 이동이나 기관총 발사와 같은 빠른 이벤트 전송에 적합하다는 것이 널리 알려져 있습니다. 다른 메시지의 경우, 신뢰할 수 있는 프로토콜인 TCP가 사용됩니다. 즉, 소켓 API에서 메시징을 위해 UDP를 사용하는 것은 간단하지만 TCP처럼 신뢰성을 보장하지 않습니다. 또한 UDP는 해킹에 더 취약하고 다양한 네트워크 환경에서 덜 안정적일 수 있습니다. 그럼에도 불구하고 속도와 단순성 덕분에 고속 액션 게임에서 독특한 장점이 있습니다. ProudNet의 신뢰할 수 없는 메시징 프로토콜은 단순한 UDP보다 훨씬 더 나은 안정성을 제공합니다.
엔진 계층의 QoS 기능 게임은 높은 네트워크 트래픽, 지연 시간 및 연결 문제를 일으킬 수 있습니다. 이러한 문제들은 ProudNet의 QoS(서비스 품질) 또는 네트워크 속도 제한 기능을 통해 쉽게 해결할 수 있습니다. 특히, QoS 기능은 게임에서 음성 채팅에 유용하게 사용됩니다.
WIFI 핸드오버
ProudNet의 네트워크 감지 기능을 통해 새로운 네트워크로 전환할 때 즉시 재연결을 시도하며, 연결이 끊어진 동안 전송된 메시지까지 복구합니다.
P2P 통신은 음성 채팅이나 캐릭터 움직임 동기화에 사용되며, 서버 부하를 줄이고 반응 속도를 높입니다.
강력한 P2P 전송 기능
P2P를 효과적으로 활용하면 서버의 부하를 줄이고 게임의 반응성을 높일 수 있습니다.
서버 간 통신(Server-to-Server)에도 P2P를 사용할 수 있고, 슈퍼 피어(Superpeer)를 선택하고 활용할 수 있습니다.
ProudNet은 클라이언트-서버(Client-to-Server) 및 클라이언트-클라이언트(Client-to-Client) 연결을 위한 단순화된 API를 제공하여, 불안정한 네트워크에서 연결 대기 상태나 연결 끊김을 확인하는 등의 복잡한 작업이 필요 없습니다.
ProudNet은 홀 펀칭(Hole-punching)과 릴레이(relay) 기능을 내장하고 있으며, 관련 작업은 ProudNet 내부에서 자동으로 처리됩니다.
ProudNet의 P2P 통신은 연결 대기 시간이 없어, 로비가 있는 게임은 즉시 시작할 수 있으며, MMORPG는 월드 동기화에서 C2C와 C2S 통신을 모두 활용할 수 있습니다.
트래픽 제어
P2P는 좋은 광대역 인터넷 환경에서는 문제가 없지만, 중국이나 동남아시아 등 ADSL2+ 이하의 속도를 제공하는 국가나 지역에서는 문제가 발생할 수 있습니다.
P2P 통신 속도가 낮으면 문제가 생기기 쉽고, NAT 라우터가 멈추는 등 다양한 문제를 유발할 수 있습니다. 이를 방지하기 위해 ProudNet은 다음과 같은 기능을 제공합니다:
일정량 이상의 데이터를 전송할 때 서버 릴레이 사용
패킷 감소 기능
P2P 간 Unreliable 및 Reliable 메시징 지원
P2P 메시지를 UDP로 전송하는 것은 TCP보다 더 간단하지만, UDP는 본질적으로 신뢰성이 없고(메시지 전달 및 순서 보장 불가), 클라이언트 간 채팅 시 일부 메시지가 손실될 수 있습니다.
ProudNet은 TCP와 유사한 ARQ(Automatic Repeat-reQuest) 메커니즘을 포함하여 이 문제를 해결합니다.
홀 펀칭 유지(Hole-Punching Upkeep)
안정적인 P2P 통신을 위해 홀 펀칭이 필수적입니다. 특히, 많은 P2P 연결과 높은 트래픽이 있는 네트워크에서 홀 펀칭을 장기간 유지하는 것이 중요합니다.
예를 들어, 중국의 인터넷 카페처럼 하나의 라우터에 수백 대의 컴퓨터가 연결된 경우, 대량의 P2P 트래픽이 라우터의 포트 매핑 엔트리 목록을 채워 연결이 끊길 수 있습니다. 이를 방지하기 위해 ProudNet은 다음 기술을 제공합니다:
즉시 홀 펀칭(Just-in-time hole-punching).
포트 매핑 재사용(Port mapping reuse).
중복 포트 매핑 방지 기술
홀 펀칭과 릴레이 간 자동 전환
P2P를 위한 홀 펀칭은 네트워크 트래픽과 NAT 라우터 상태에 따라 갑자기 소멸될 수 있습니다. 이를 적절히 처리하지 않으면 플레이어가 멈추거나 문제가 발생할 수 있습니다.
ProudNet은 P2P 연결 상태를 감지해 홀 펀칭과 릴레이를 자동으로 전환하여 이러한 문제를 방지합니다.
홀 펀칭이 갑자기 중단되더라도 작은 지연만 발생하며, 연결이 끊어지지는 않습니다.
즉시 홀 펀칭 (Just-In-Time Hole Punching)
ProudNet은 다음 기술로 안정적인 P2P 통신을 지원합니다
즉시 홀 펀칭(Just-in-time hole-punching).
포트 매핑 재사용(Port mapping reuse).
중복 포트 매핑 방지 기술
원격 메서드 호출 (Remote Method Invocation, RMI)
받은 메시지가 어떤 것인지 알아내기 위해 많은 switch-case 문을 작성할 필요없이 ProudNet의 RMI로 해결할 수 있습니다.
PIDL로 메시지를 정의하고 컴파일하면, 메시지를 전송(프록시)하고 수신(스텁)하는 코드를 생성합니다.
개발자는 이 코드를 서버 또는 클라이언트 객체에 포함하고 등록하여, 메시지를 함수 호출하듯이 간단히 보낼 수 있습니다.
암호화 및 압축 (Encryption/Compression)
중요한 데이터를 주고받을 때, 암호화는 필수입니다. ProudNet은 두 가지 주요 암호화 방식을 제공합니다.
빠르지만 약한 암호화: 보안성이 다소 낮지만 암호화/복호화 속도가 매우 빠릅니다.
강력하지만 느린 암호화: 신뢰할 수 있는 AES 알고리즘을 사용합니다.
서버 부하가 증가하더라도 메시지를 압축하여 트래픽을 줄이는 것이 더 유리한 경우가 있습니다. ProudNet은 이러한 경우를 대비해 손쉽게 사용할 수 있는 압축 기능을 제공합니다.
클라이언트-서버 및 클라이언트-클라이언트(P2P) 메시징에서 강력한 암호화를 지원합니다.
패킷 스니핑, 복사, 변조를 방지하는 메커니즘이 내장되어 있습니다.