[1.6 버전] 서버 간 LAN 통신기
Last updated
Last updated
LanServer, LanClient는 1.7 버전부터 퇴역 되었습니다. LanServer, LanClient의 역할을 NetServer, NetClient가 대신 합니다.
ProudNet 서버와 네트워크와 서버 간 LAN 통신기의 차이점은 다음과 같습니다.
구분 | ProudNet 서버와 네트워크 | 서버 간 LAN 통신기 |
---|---|---|
lan_main는 다음과 같이 호스트 간 고속 통신을 제공합니다.
TCP 만 사용하기 때문에 서버 하드웨어의 통신 가속화(TCP Offload Engine)를 사용합니다.
Client 와 달리 이벤트 및 수신 메시지를 스레드 풀에서 콜백합니다. 물론, 서버 측 또한 thread pool에서 콜백이 발생합니다.
ProudNet 서버와 네트워크과 LAN 통신기의 사용법은 거의 동일합니다.
다음은 API 차이점입니다.
Proud.CLanClient 호스트 간의 P2P 통신에서는 TCP 프로토콜이 사용됩니다.
Proud.CLanServer.CreateP2PGroup 등에 의해 호스트 간 P2P 통신이 성사되는 순간 P2P 메시징을 시작하는 경우 피어 간 TCP 연결이 완료되기 전까지는 보내려는 메시지가 각 호스트의 로컬 queue에 저장됩니다. 저장된 메시지는 TCP 연결이 성사 되자마자 즉시 전송을 시작합니다.
TCP 연결이 성사되자마자 Proud.ILanClientEvent.OnP2PConnectionEstablished, Proud.ILanServerEvent.OnP2PConnectionEstablished 가 콜백됩니다.
반대로 TCP 연결이 해제되면 Proud.ILanClientEvent.OnP2PDisconnected, Proud.ILanServerEvent.OnP2PDisconnected가 콜백됩니다.
Proud.ILanClientEvent.OnGroupP2PConnectionComplete, Proud.ILanServerEvent.OnGroupP2PConnectionComplete 는 P2P 그룹 내의 모든 멤버들이 TCP 연결이 성사되면 콜백됩니다.
Proud.CLanClient 는 event 콜백과 RMI 콜백은 스레드 풀의 스레드에서 발생합니다. 그리고 이 스레드 풀은 Proud.CLanClient 에서 준비하기 때문에 Proud.CNetClient.FrameMove에 대응하는 함수는 없습니다.
Proud.CLanConnectionParam.m_netWorkerThreadCount 에서는 클라이언트에서 가지고 있을 스레드 풀의 스레드 갯수를 지정할 수 있습니다.
LAN 클라이언트는 연결 과정( CLanClient.Connect ) 에서 user worker thread pool 을 만들며, 연결 해제 과정 ( CLanClient.Disconnect ) 에서 그 pool 을 제거하기 때문에 LAN 클라이언트는 연결 해제 또는 연결 명령을 user worker thread에서 시행할 수 없습니다.
만약 시행 하면 Proud.Exception이 발생합니다.
RMI 사용법과 동일합니다.
클라이언트에서 서버 시간 얻기 사용법과 동일합니다.
NetClient.Connect() 호출 시 thread model 지정이 필요 합니다.
호출 시 m_userWorkerThreadModel 에 파라미터를 넣어 user 콜백이 여러 스레드에서 받아질 수 있게 해야합니다.
또는 m_externalUserWorkerThreadPool 파라미터에 만들어 놓은 스레드 풀 객체를 붙입니다.
이 스레드 풀은 여러 스레드를 가집니다.
서버 간에 통신할 때 기존 TCP 통신에서 UDP base 통신으로 변경되었으며, UDP Port 관련 방화벽 작업이 필요합니다.
1.7 라이브러리를 준비합니다. 라이브러리는 <설치 폴더>/ProudNet/lib/ 에 있습니다.
함수 명을 Lan 에서 Net 으로 변경 합니다. 변경 대상은 클래스, 함수, 메소드 모두 포함. 대부분 1:1 matching 이라 큰 변화 없이 전환이 가능합니다.
LanCommon → NetCommon
UUID → PNGUID
Guid::From(guid) → Guid(guid)
LanServer → NetServer
CLanServerEventSink → CNetServerEventSink
OVERRIDE → PN_OVERRID
CLanServer → CNetServer
CStartLanServerParameter → StartServerParameter
p1.m_tcpPort = g_ServerPort → p1.m_tcpPort .Add(g_ServerPort)
LanClient → NetClient
CLanClient → CNetClient
ILanClientEvent → INetClientEvent
OVERRIDE → PN_OVERRID
CLanClient::Create() → CNetClient::Create()
CLanConnectionParam → CNetConnectionParam
ProudNetServer.h → ProudNetClient.h
구분 | ProudNet 서버와 네트워크 | 서버 간 LAN 통신기 |
---|---|---|
주요 용도
일반 사용자 어플리케이션과 서버와의 통신
분산 서버 구조에서 각 서버 간의 통신
NAT 장치 투과
YES
NO
P2P relay(relay)
YES
NO
클라이언트-서버간 통신 프로토콜
TCP and UDP
TCP
P2P 통신 프로토콜
(Reliable) UDP
TCP
클라이언트의 콜백 방식
Poll (Proud.CNetClient.FrameMove에서 콜백)
스레드풀에서 콜백
Server
Proud.CNetServer
Proud.CLanServer
Client
Proud.CNetClient
Proud.CLanClient
Server event handler
Proud.INetServerEvent
Proud.ILanServerEvent
Client event handler
Proud.INetClientEvent
Proud.ILanClientEvent
Message pool method
Proud.CNetClient.FrameMove
None (callback in thread pool)