[게임 서버] 6.4 메시지 주고받기
카테고리: GameServer
태그: GameServer
📦 6. 게임 네트워크 엔진 프라우드넷
👉🏻 4. 메시지 주고받기
📬 메시지 전송 방법
두 가지 방법:
- 전통적인 방법으로 바이너리 데이터 주고받기 (현재 알아볼 방법)
- 다른 컴퓨터에 있는 함수를 원격 호출
📤 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로 전송 옵션 제어
- 단일/다수 클라이언트 전송 지원
- 이벤트 기반 수신 처리
댓글남기기