[게임 서버] 6.4 메시지 주고받기

게시:     수정

카테고리:

태그:

📦 6. 게임 네트워크 엔진 프라우드넷

👉🏻 4. 메시지 주고받기

📬 메시지 전송 방법

두 가지 방법:

  1. 전통적인 방법으로 바이너리 데이터 주고받기 (현재 알아볼 방법)
  2. 다른 컴퓨터에 있는 함수를 원격 호출

📤 1. 전통적인 방법으로 바이너리 데이터 주고받기

SendUserMessage() 함수:

  • NetClient/NetServer에는 SendUserMessage() 함수가 존재한다
  • 상대방에게 메시지를 전송할 수 있다

🔧 매개변수

HostID 또는 HostID array:

  • 메시지를 보내고자 하는 대상

reliable 또는 unreliable:

  • 전송을 보장할지, 보장하지 않지만 즉시 전송할지
  • 암호화 혹은 압축 여부, 오래된 메시지는 건너뛸지 같은 옵션 존재
  • 이들을 통틀어 RmiContext 구조체라고 한다

byte array:

  • 보낼 메시지를 의미하는 바이너리 데이터

📨 메시지 송신 예시

unsigned char data[100];

// 클라이언트 → 서버, Reliable
c->SendUserMessage(HostID_Server, RmiContext::ReliableSend, data, 100);
// 서버 → 클라이언트, Unreliable
s->SendUserMessage(ClientHostID, RmiContext::UnReliableSend, data, 50);

// 서버 → 다수의 클라이언트들, Unreliable
HostID sendTo[10];
s->SendUserMessage(sendTo, 10, RmiContext::UnreliableSend, data, 30);

📥 메시지 수신 예시

c->OnReceiveUsermessage = [...]
	(HostID sender, const RmiContext& rmiContext, uint8_t* payload, int payloadLength) {
	... // 수신된 이벤트 처리
}

동작:

  • 메시지를 수신하면 해당 이벤트 함수가 호출된다

매개변수:

  • sender: 누가 보냈는가
  • rmiContext: 어떠한 방식으로 받았는가
  • payload: 받은 메시지

🧐 정리

전송 방식 특징 사용 시기
ReliableSend TCP 기반, 전송 보장 중요한 데이터 (아이템, 채팅)
UnreliableSend UDP 기반, 빠른 전송 실시간 데이터 (위치, 상태)

핵심:

  • RmiContext로 전송 옵션 제어
  • 단일/다수 클라이언트 전송 지원
  • 이벤트 기반 수신 처리

GameServer 카테고리 내 다른 글 보러가기

댓글남기기