[게임 서버] 2.7 패킷 유실 시 UDP와 TCP에서 현상
카테고리: GameServer
태그: GameServer
📦 2. 컴퓨터 네트워크
👉🏻 항목 8: 주로 사용하는 메시지 형식
1. 메시지 형식 종류 ✉️
1.1. 텍스트 형식
BuyItem<LF>
Sword<LF>
1<LF>
<0x00>
- 사람이 읽을 수 있다.
- 특정 글자를 찾을 때:
- 글자 검색 혹은 구문 분석기(parser) 사용
1.2. 바이너리 형식
v Sword
0x01 | 0x0023 | 0x0001
^ BuyItem ^ 1
- 각 바이트 혹은 비트 필드는 특정한 의미를 가진다.
- 바이트 사이즈로 필드를 구분한다.
- 구문 분석기가 필요없다.
- 처리 성능 ⇡
- 통신량 ↓
- 디버깅이 까다롭다.
2. 메타데이터 🏷️
- 메시지 내용에 대한 정보를 제공하는 데이터
// 메시지 형식
Action: BuyItem<LF>
Type: Sword<LF>
Amount: 1<LF>
<0x00>
// 바이너리 형식
v BuyItem v Sword v 1
0x0001 | 0x01 | 0x0005 | 0x0023 | 0x0046 | 0x0001
^ Action ^ Type ^ Amount
- 메타데이터로 인해, 무슨 의미인지 알 수 있어진다.
단점:
- 메타데이터로 인해, 데이터 통신량이 많아진다.
- 해킹에 취약해진다.
장점:
- 하위 호환성 측면에서 유리하다.
2.1. 메타데이터 하위 호환성
문제:
- 두 프로세스의 버전이 다른 경우:
- 버전 1: Action, BuyItem, Type, Sword
- 버전 2: Action, BuyItem, Type, Sword, Amount, 1
- 서버는 버전 2, 클라이언트는 버전 1,2가 공존한다.
해결:
- 서버에서 내용 일부가 없는 상황에 맞춰, 작동을 다르게 구현한다.
- e.g. 개수 값이 없으면 개수를 1로 가정
PC의 경우 버전 1과 2가 서버에 동시 접속하는 일이 드물지만,
모바일은 자주 일어난다.
댓글남기기