WebSocketby Pigbrain

웹소켓의 장점과 단점

  • 장점
    • HTTP가 아닌 TCP를 이용하여 통신한다
    • 양방향 통신을 지원한다
    • HTTP보다 빠르다

  • 단점
    • 브라우저에서 HTML5을 지원해야 한다
    • 클라이언트와 서버가 통신하기 위해서 특정 프로토콜이 필요하다



웹소켓 프로토콜

  • HTTP handshake
    • 클라이언트는 서버에게 웹소켓 사용을 위한 HTTP 패킷을 보낸다
    • 서버에서 해당 프로토콜을 지원한다면 웹소켓 사용을 위한 응답을 보낸다
    • Connection : “Upgrade” 토큰이 반드시 있어야 한다
    • Sec-WebSocket-Key : Base64로 인코딩된 랜덤한 16바이트의 문자열
    • Sec-WebSocket-Accept :
      • Sec-WebSocket-Key + “258EAFA5-E914-47DA-95CA-C5AB0DC85B11”
        • uRovscZjNol/umbTt5uKmw==258EAFA5-E914-47DA-95CA-C5AB0DC85B11
      • SHA-1으로 해싱
        • acb1c2930fd22ac3 bd1801ff65216104 04c32ab5
      • Base64로 인코딩
        • rLHCkw/SKsO9GAH/ZSFhBATDKrU=
    • Sec-WebSocket-Version : 무조건 13 !
    • Updage : “websocket” 키워드가 반드시 있어야 한다


  • HTTP handshake가 완료 되면 HTTP Connection을 종료한다
  • HTTP Connection 종료 후 웹 소켓 Connection을 위한 TCP Connection을 생성한다
  • HTTP와 동일한 포트를 사용
    • HTTP : 80 포트
    • HTTPS : 443 포트
  • TCP 통신은 다음과 같은 프로토콜을 사용한다


    • Text, Binary 모두 전송 가능
    • 패킷은 최소 2bytes로 만들어질 수 있다
    • Text 전송 프레임은 0x00, 0xFF바이트를 구분자로 사용
      • 0x00 H e l l o W o r l d 0xFF
    • UTF-8 인코딩을 사용
    • Binary 전송 프레임은 length 필드를 이용한다

웹소켓 API

  • 웹소켓 생성


  • 연결 완료 콜백


  • 메세지 수신 콜백


  • 연결 종료 콜백


  • 메세지 전송


  • 웹소켓 종료


웹소켓 지원 서버

  • NC: Native Comet (The WebServer has API for Comet)
  • NWS: Native WebSockets (The WebServer has API for WebSocket)
  • W: WebSockets
  • LP: Long-Polling
  • HS: Http Streaming
  • J: JSONP
  • SSE: Server-Sent Events






웹소켓 지원 브라우저



참고

  • https://www.websocket.org/aboutwebsocket.html
  • http://synvistech.com/blogs/advantages-disadvantages-of-websocket-api
  • https://github.com/Atmosphere/atmosphere/wiki/Supported-WebServers-and-Browsers
Published 22 September 2015