개요
프라우드넷은 게임 서버, 클라이언트 프레임워크인 네트워크 엔진 중 하나이다. 한국의 Nettention에서 개발하였으며 현재는 펄어비스의 자회사가 되었다.
기본 구조
프라우드넷은 서버와 클라이언트 프로그램 각각에서 NetServer 클래스와 NetClient 클래스를 각자 사용한다.
서버에서는 NetServer.Create()로 NetServer인스턴스를 생성 한뒤 NetServer.Start()로 서버를 열 수 있다. 특정 프로토콜 버전(우리가 만들고 있는 프로그램의 프로토콜 버전으로 스스로의 버전 동기화에 사용하면 된다.)과 리스닝 포트를 넣으면서 Start를 호출하면 해당 포트에 서버가 열린다.
클라이언트에서는 CNetClient.Create()로 인스턴스를 생성하고 CNetClient.Connect()로 서버에 접속을 할 수 있다. 역시 서버 주소, 포트 ,프로토콜 버전 등을 넣는다.
상호작용
프라우드넷은 기본적으로 콜백 함수 방식을 주로 사용한다. NetServer의 OnClientJoin 콜백 함수를 특정 함수로 채우면 클라이언트가 서버에 접속을 할때마다 해당 함수가 호출된다. 이때 해당 클라이언트에게는 HostID가 할당되며 해당 ID가 매개변수로 오게된다. 마찬가지로 클라이언트의 연결이 끊길때 등의 다양한 콜백함수가 존재하며 클라이언트에도 마찬가지로 접속 성공 메세지가 응답됬을때, 서버와 연결이 끊겼을때 호출되는 등의 다양한 콜백함수가 존재한다.
이외에도 서버와 클라이언트는(또는 클라이언트 끼리 p2p로) 메세지를 주고 받거나 RMI(원격 메소드 호출)을 통해 서로 이벤트를 줄 수 있다.
콜백함수 호출, 메시지 수신, RMI등을 이벤트라고 묶어서 이야기하자. 서버는 Start를 호출한 시점에 해당 이벤트들을 처리하는 스레드풀이 생성되며 이벤트들이 발생하는 순간 즉시 여유가 되는 스레드가 해당 이벤트를 처리한다.
그에 비해 클라이언트의 경우 CNetClient.FrameMove()라는 함수를 호출하는 순간에 쌓여있던 이벤트들이 한번에 처리된다. 보통 업데이트 전에 처리하여 데이터를 동기화하고 게임 로직을 처리하면 된다.
RMI
프라우드넷에는 RMI라는 원격 메서도 호출 기능이 존재한다. 서버 또는 클라이언트 한쪽에서 자신이 아닌 서버나 클라이언트의 함수를 호출하는 기능이다. 이는 Pidl이라는 프라우드넷 자체 확장자 파일로 함수 형을 정의 해둔뒤 각 프로그래밍 환경에서 적절한 애드온으로 적용시키면된다. 그러면 해당 Pidl이 함수를 호출하는 쪽에는 함수 호출을 요청하는 메세지를 보내는 코드를, 호출 당하는 쪽에는 메세지를 받고 특정 함수를 호출하는 코드를 자동 생성한다. 우리는 정해진 규칙대로 우리가 Pidl에 작성한 특정 네임스페이스의 proxy, stub 클래스들을 사용하여 함수 호출이나 호출될 함수 정의들을 수행하면 된다.
P2P
프라우드넷에서 P2P는 그룹단위로 구현할 수 있다. 특정 P2P 그룹을 만들 수 있고 해당 그룹에 클라이언트(서버도 가능)들을 넣으면 서로 P2P통신이 가능해진다.
참고서적
게임 서버 프로그래밍 교과서
'네트워크 > 게임 서버 프로그래밍' 카테고리의 다른 글
[게임 서버][7장]데이터베이스 (0) | 2023.03.21 |
---|---|
[게임 서버][5장]게임 네트워킹 (1) | 2023.03.21 |
[게임 서버][4장]게임 서버와 클라이언트 (0) | 2023.03.21 |
[게임 서버][3장]소켓 프로그래밍 (0) | 2023.03.21 |
[게임 서버][2장]컴퓨터 네트워크 (0) | 2023.03.21 |