WebSocket, Socket.IO

newhyork·2022년 10월 16일
0

WebSocket


  • HTTP처럼, TCP를 기반으로 한 OSI 7(Application) Layer 프로토콜의 한 종류이다.
  • 웹 클라이언트와 서버 간에 양방향 전 이중 통신을 하고자 할 때 사용한다.
  • 주식 차트와 같은 실시간 서비스 혹은 채팅 서비스 APP 등에 주로 사용된다.
    • server push notification 서비스 구현에도 사용되곤 하나,
      이 때는 SSE(Server Sent Event)를 두고 고려해볼 수 있다.
  • HTML5에 들어서 웹 표준 기술이 되었다.
    • 이전에는, 다소 비효율적인 방법인 polling 등을 통해
      실시간 및 양방향 서비스를 구현하곤 했다.
  • URL 형식은 ws://, wss://따위이다.
  • HTTP/S가 아니지만, 80/443번 포트를 사용하도록 설계되었다.
  • 메시지의 header가 작아, overhead(간접적인 자원)를 줄일 수 있다.

HTTP vs WebSocket


  • request-response 관점이 아니라, connection open-close 및 message send-receive 관점이다.
    • WebSocket connection이 open되기 위해선,
      우선 최초에는 클라이언트의 HTTP request로 시작하여
      프로토콜을 upgrade 하자는 handshake를 하며,
      서버의 응답에 따라 이후로 WebSocket 통신이 가능해진다.
  • 클라이언트의 request에 따라 서버는 response만 할 수 있는 방식이 아니라,
    서버가 원하는 때에도 송신할 수 있다.
    • 이를 위해, HTTP와는 달리 connection을 유지한다.
      즉, stateful하다고 할 수 있다.

Socket.IO


  • client와 server간에 실시간 양방향 통신 구현을 지원하는 라이브러리이다.
    • 웹 브라우저마다 지원하는 WebSocket 버전이 다르며,
      오래된 브라우저의 경우에는 아예 이 프로토콜을 지원하지 않는 경우도 있다.
      그러므로, 웹 브라우저와 서버의 종류 및 버전에 따라,
      WebSocket 프로토콜 뿐만 아니라 HTTP polling, streaming, flash socket 등
      이 중 하나의 방법을 사용하여, 브라우저에 관계없이 실시간 통신이 가능하게 해준다.
      • polling 방식으로 하게 되면,
        클라이언트 측에서 메시지를 보낼 땐 POST, 받을 땐 GET하여 실시간 통신한다.
        즉, 메시지를 주고 받음에 따라 network탭에 HTTP 통신이 매번 발생한다.
      • WebScoket 방식으로 하게 되면,
        최초에 handshake를 할 때는 HTTP(polling)로 하고, upgrade: WebSocket 이후에는
        HTTP가 아니라 WebSocket으로 양방향 통신을 하게 된다.
        - 메시지 내역은 ‘Messages’에서 확인할 수 있다.
    • 다음과 같은 다양한 기능을 지원한다.
      • 소켓 연결 실패 시, fallback을 통해 자동으로 재연결 시도를 하는 기능이 있다.
      • room을 이용해, 일부 클라이언트에게만 메시지 전송이 가능하다.

0개의 댓글