나만의 작은 도서관

[TIL] 240712 캠프 89일차: 웹소켓에서 서버 주도 방식에서의 통신 본문

Today I Learn

[TIL] 240712 캠프 89일차: 웹소켓에서 서버 주도 방식에서의 통신

pledge24 2024. 7. 12. 23:46

오늘 배운 내용                                     

웹소켓에서 서버 주도 방식에서의 통신

이전 과제에서는 웹소켓에서 클라이언트 주도 방식으로 데이터를 동기화 및 검증하였다. 이번에는 클라이언트 주도 방식 대신 서버 주도 방식으로 변경하고 멀티 플레이를 지원하도록 과제를 진행하게 되었다. 그래서 통신을 하는 방식도 많이 달라져 과제를 진행하기 전에 한 번 정리해보았다.

 

기본적인 통신 방법 리마인드

 

웹소켓은 기본적으로 7계층에서 수행된다. 또한 http와도 연관이 있어, 요청-응답 방식을 사용하고 있다. 웹소켓은 소켓을 통해 이벤트를 emit하면 해당 emit을 수신받은 호스트가 대응하는 이벤트를 수행한다. 따라서, 각 이벤트를 역할에 맞게 수행하도록 수신받는 호스트 소켓에 대응하는 이벤트가 추가되어 있어야한다.

클라이언트-서버 구조에서는 이벤트의 종류가 다르다. 클라이언트는 response와 notification이벤트를 가지고, 서버는 오로지 event(request)만을 가진다. 물론, connection과 disconnect이벤트도 있지만 이는 연결의 시작과 끝에서만 사용하기 때문에 생략하겠다.

 

 

요청(클라이언트 -> 서버)

 

 요청은 아주 쉽다. 클라이언트에서 특정 상황에서 발생한 데이터를 서버에게 넘겨주는 것이다. 클라이언트 주도에서는 변경된 데이터를 넘겨주었지만 지금은 서버 주도 방식이기 때문에 변경을 해달라는 요청을 한다.

 

응답(서버 -> 클라이언트) 

 

클라이언트가 요청을 했다면, 해당 요청에 대한 응답을 하게된다. 동기화 과정에서 위반된 데이터가 들어오지 않는 이상, 응답을 필수적으로 받아야하는 요청에 응하는 데이터를 응답한다. 예를 들어, 기지 피격과 같은 이벤트가 발생했을 때, 기지의 HP를 갱신해달라는 클라이언트가 요청을 하게된다. 해당 데이터를 받은 서버는 동기화 과정을 진행한 후, 기지의 줄어든 HP를 클라이언트에게 응답한다. 

 

통지(서버 -> 클라이언트) 

 

이번에 새로 생긴 통신 방식이다. 통지는 해당 클라이언트에게 요청도 없었을 때 전송하는 데이터다. 일반적으로 다른 클라이언트가 서버에게 요청했을 때, 해당 요청과 관련된 다른 클라이언트에게 변경된 동기화 데이터에 대한 통지를 하게된다.

 

오늘 한 일                                       

더보기
  • 타워 디펜스 온라인 팀 프로젝트 역할 진행(몬스터 생성 요청 및 통지 기능) 30%완료