5.클라이언트-서버 통신의 개요

ProudNet에서 클라이언트와 서버간 통신은 메시지 단위로 이루어집니다. 1개의 메시지는 1회의 RMI 호출(4. Remote Method Invocation (원격 메서드 호출) 참고) 에 대응합니다.

ProudNet의 클라이언트-서버간 통신에서는 reliable, unreliable 통신이 모두 가능합니다. (3. ProudNet의 프로토콜 종류 참고)

클라이언트가 서버에 연결하면 우선 TCP로 통신이 이루어집니다. 그 동안에 백그라운드로 UDP 홀펀칭을 서버와 하게 됩니다. 만약 서버와의 UDP 홀펀칭이 성공하게 되면 UDP 통신도 가능해집니다. UDP 홀펀칭이 성공하기 전까지는 reliable, unreliable 메시징 모두 TCP로 대체됩니다. 하지만 UDP 홀펀칭이 성공한 후부터는 Reliable 메시징은 UDP로 대체됩니다.

클라이언트는 1개의 TCP port, 1개의 UDP port를 가지고 서버와 통신하게 됩니다. 한편, 서버는 1개의 TCP listening port, 1개 이상의 UDP port를 가지고 통신합니다.

클라이언트는 서버와 TCP 연결을 유지하면서, 서버측의 UDP port 중 한개가 선정되어 클라이언트와 통신하는 데 사용됩니다. 즉, 서버측은 여러개의 UDP 포트를 접속한 모든 클라이언트들에게 고루 공유하면서 사용합니다. 예를 들어 4만개의 클라이언트가 20000개의 UDP 포트를 연 서버와 통신할 경우, 서버측의 UDP port 하나당 대략 2개의 클라이언트가 통신하게 됩니다.

그림 5-1많은 대규모전 온라인 게임에서는 클라이언트-서버 통신을 활용합니다. 사진은 유명한 대규모전 온라인 게임인 월드오브워크래프트