이제 다가오는 CH4 주차에는 웹 소켓을 활용한 실시간 데이터 통신에 대한 학습이 주를 이룬다.
목차는 다음과 같이 볼 수 있다.
- 게임 개발의 전반적인 프로세스
- HTTP, TCP, Web Socket 에서의 데이터 교환 방법
- 데이터 교환을 위한 packet 구조 설계
- handler 구조의 server 데이터 처리 구현
application layer level
HTTP 에서는 기본적으로 요청-응답의 구조를 가진다. 즉, 비연결성으로 연결에 대해 항상 유지하는 것이 아니라, 요청에 대해서만 응답을 하는 구조이다.
이는 연결을 유지할 필요가 없기 때문에 들어가는 리소스가 가벼워져 처리속도가 빠른 점을 가지게 된다.
그리고 이전에 여떤 요청을 했는지에 대한 정보의 저장을 담고 있지 않는 무상태성을 띈다.
따라서 HTTP의 특성을 요약하면 다음과 같다.
transport layer level
TCP는 연결지향적인 통신규약이다.
// 3way handshake
client || _____ || Server
-SYN->
<-SYN-ACK
-ACK->
서버는 접속 요청을 받기 위한 소켓을 열어 listen을 시작하고,
클라이언트는 소켓을 만들고 서버에 접속을 요청하여 connect한다.
서버는 요청을 받아 클라이언트와 통신할 소켓을 만들어 accept 과정을 거치면,
해당 소켓을 통해 데이터 교환 send & receive가 이루어진다.
통신을 마치면 소켓을 닫아주는 것으로 마무리된다.
웹소켓은 주요 특성은 다음과 같다.
- 실시간 통신
- 양방향 통신
- 지속적인 연결
- 낮은 오버헤드
- HTTP와의 호환성
웹 소켓을 통한 통신은 지속적인 연결성을 유지함으로 실시간 통신이 가능하며 그 교환의 방향도 양방향으로 동시에 데이터를 주고 받는 것이 가능하다.
또한, 헤더에 포함하는 데이터가 HTTP보다 경량화되어 있어 낮은 오버헤드를 가진다. HTTP 요청은 매 요청 시 다양한 메타데이터(콘텐츠 타입, 길이 등)를 포함해야 한다. 반면, 웹 소켓 헤더는 초기 연결 설정 시에만 사용되며, Upgrade와 Connection 필드가 포함되어 프로토콜을 웹 소켓으로 업그레이드하고, 이후의 데이터 전송에서는 헤더를 사용하지 않고, 연결이 지속적으로 유지한다.