나만의 작은 도서관
[TIL] 240704 캠프 81일차: TCP과제 패킷 구조 파악 본문
오늘 배운 내용
TCP과제 패킷 구조 파악
TCP서버 구축에서 패킷의 구조를 파악하는 것이 중요하다 그래서 과제에서 나오는 패킷의 구조들을 하나씩 파악하며 어디에 쓰이는 지 확인해보았다.
최상단 패킷
서버와 클라이언트가 서로 통신할 때 가장 먼저 받게되는 구조이다. 각 구조는 다음과 같다.
- TOTAL_LENGTH(헤더): 패킷의 전체 길이
- PACKET_TYPE(헤더): 패킷의 타입
- PROTOBUF: protoBuf로 인코딩된 메세지
프로토버프
패킷에 들어있던 프로토버프의 종류이다. 종류는 요청에 사용하는 일반패킷과 응답에 사용하는 응답패킷, 총 2종류이며 각각의 패킷 필드는 다음과 같다.
일반패킷(CommonPacket)
- handlerId: 핸들러 Id
- userId: 유저Id(deviceId로 사용하고 있다.)
- version: 클라이언트 버전
- payload: 페이로드
응답패킷(Response)
- handlerId: 핸들러 Id
- responseCode: 응답 코드(응답 성공 시 0)
- timestamp: 패킷을 전송한 시각
- data: 데이터
페이로드
일반패킷에서 페이로드들의 종류가 여러가지 있다. 페이로드의 종류는 InitialPayload, LocationUpdatePayload, LocationUpdate로 총 3가지 종류의 페이로드가 있다. 각각의 페이로드들의 역할과 필드들의 의미는 다음과 같다.
InitialPayload: 클라이언트와 서버가 처음 연결될 때 딱 한 번 전송하는 페이로드
- deviceId: 디바이스id. 클라이언트에서 입력한다. 입력이 없을 시, 임의의 uuid가 들어간다.
- playerId: 플레이어id. 클라이언트에서 4개의 캐릭터중 하나를 랜덤으로 선택하는데, 이 때 선택된 캐릭터의 index가 들어간다(0 <= playerId < 4)
- latencty: 지연율
LocationUpdatePayload: 클라이언트와 서버에게 이동한 위치를 전송하는 페이로드
- x: 캐릭터 x좌표
- y: 캐릭터 y좌표
LocationUpdate : 서버가 클라이언트에게 다른 유저들의 위치 정보를 전송하는 페이로드
- users: 유저의 위치정보와 여러정보들을 저장하고 있는 UserLocation 리스트
- UserLocation
- id: 디바이스id. 클라이언트에서 입력한다. 입력이 없을 시, 임의의 uuid가 들어간다.
- playerId: 플레이어id. 클라이언트에서 4개의 캐릭터중 하나를 랜덤으로 선택하는데, 이 때 선택된 캐릭터의 index가 들어간다(0 <= playerId < 4)
- x: 캐릭터 x좌표
- y: 캐릭터 y좌표
전체 구조
오늘 한 일
더보기
- 과제 필수 기능 구현 -완-
- 과제 도전 기능 구현 30%