socket.io라는 라이브러리를 공부하다가 그동안 채팅하면 무지성으로 websocket 라이브러리(stomp, sock.js 등)를 가져다 쓰기 바빴는데 이번 기회에 서버와 클라이언트 간의 양방향 데이터 송수신에 사용되는 세 가지를 정리해보고자 한다.
일단 polling과,long-polling은 HTTP라는 프로토콜을 사용하지만 websocket은 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜 (출처 :위키백과) 로 HTTP가 아닌 하나의 프로토콜이다.
polling
일정시간 일정 간격을 두고 계속 요청하는 방법으로 말그대로 계속해서 요청하는 방법이다. 데이터가 없어도 무조건 요청이 가게 된다. 자료조사가 더 필요하지만 카카오에서 카카오페이 결제와 같은 부분에 polling방식을 사용하고 있는 듯하다. (카카오 polling으로 구글 검색하니 나왔다)
long-polling
기본방식은 polling처럼 무한히 물어보는 것으로 일단 요청을 보내고 timeout이 될 때까지(보통은 100-300초 정도 요청을 보내고 대기한다) 대기하고 응답이오면 다시 새로운 요청을 보내고, timeout 되면 다시 새로운 요청을 보내고 기다리는 방식이다. 따라서 거의 실시간이라고 볼 수 있다.
websocket
웹소켓은 위에서 언급했듯 하나의 프로토콜이라서 http:// 가아닌 ws://이러한 주소로 클라이언트에서 요청을 보낸다. 클라이언트와 서버가 connect 되면 서버와 클라이언트는 정보를 송수신하게 되고 더 이상 주고받을 정보가 없으면 disconnect 한다.
websocket은 별도의 프로토콜을 사용하여 서버와 클라이언트간 접속을 열어두는 것이기 때문에 따로 서버가 필요하다.
생각정리
큰 데이터들을 주고 받는 것이 아니라면 채팅을 구현할 때 long-polling 방식도 필요에 따라 선택할 수 있다. (socket.io 라이브러리도 fallback에서는 websocket이 아닌 long-polling 방식으로 바뀐다)
'CS공부' 카테고리의 다른 글
쿠키가 무엇일까? (0) | 2023.07.24 |
---|---|
정보처리기사 실기 시험 후기 (0) | 2023.04.23 |
HTTP 상태 코드 (200,201,204의 차이) (0) | 2022.10.05 |
메모리 구조(스택과 힙) (0) | 2022.08.17 |
HTTP URI, 메서드,상태코드,프락시 초간단 정리 (0) | 2022.08.08 |
댓글