websocket 과 polling, long-polling

    socket.io라는 라이브러리를 공부하다가 그동안 채팅하면 무지성으로 websocket 라이브러리(stomp, sock.js 등)를 가져다 쓰기 바빴는데 이번 기회에 서버와 클라이언트 간의 양방향 데이터 송수신에 사용되는 세 가지를 정리해보고자 한다.

     

    일단 polling과,long-polling은 HTTP라는 프로토콜을 사용하지만 websocket은 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜 (출처 :위키백과) 로 HTTP가 아닌 하나의 프로토콜이다.

     

     

    polling 방식 그림

     

    polling

    일정시간 일정 간격을 두고 계속 요청하는 방법으로 말그대로 계속해서 요청하는 방법이다. 데이터가 없어도 무조건 요청이 가게 된다. 자료조사가 더 필요하지만 카카오에서 카카오페이 결제와 같은 부분에 polling방식을 사용하고 있는 듯하다. (카카오 polling으로 구글 검색하니 나왔다)

     

    long-polling

    기본방식은 polling처럼 무한히 물어보는 것으로 일단 요청을 보내고 timeout이 될 때까지(보통은 100-300초 정도 요청을 보내고 대기한다) 대기하고 응답이오면 다시 새로운 요청을 보내고, timeout 되면 다시 새로운 요청을 보내고 기다리는 방식이다. 따라서 거의 실시간이라고 볼 수 있다.

     

    websocket

     

    웹소켓은 위에서 언급했듯 하나의 프로토콜이라서 http://  가아닌 ws://이러한 주소로 클라이언트에서 요청을 보낸다. 클라이언트와 서버가 connect 되면 서버와 클라이언트는 정보를 송수신하게 되고 더 이상 주고받을 정보가 없으면 disconnect 한다.

    websocket은 별도의 프로토콜을 사용하여 서버와 클라이언트간 접속을 열어두는 것이기 때문에 따로 서버가 필요하다.

     

     

    생각정리

    큰 데이터들을 주고 받는 것이 아니라면 채팅을 구현할 때 long-polling 방식도 필요에 따라 선택할 수 있다. (socket.io 라이브러리도 fallback에서는 websocket이 아닌 long-polling 방식으로 바뀐다)

    댓글