티스토리 뷰

웹 프로그래밍

Websocket 프로토콜이란 ??

소림파워 2016. 1. 22. 00:25

출처

http://blog.naver.com/joebak/220516030309


개요

* HTML5 에서 소개한 양방향 통신 프로토콜

* 아직 표준은 아님.

* HTTP와 비교시 장단점

 장점: Server 에서 Client로 바로 Event를 줄 수 있다는 점에서 성능향 효율적이다. (polling 과 같이 불필요한 request 가 없어도 됨)

 단점: 코드 수준에서의 관리가 어렵다. 이벤트 방식이기 때문에 Event Listener 등록, Event 함수 등록해서 사용해야 함.

      개발단계에서 Connection, Event 발생, Close를 다 해줘야 하므로, 서버개발자가 Test용 Client 어플리케이션을 직접 개발해가며 테스트해야 한다.


특징

  1.  'http://' 와 다르게 'ws://' 와 같은 Web Socket Structure를 사용한다.
  2. Polling, Long Polling 방식과 달리 Connection 을 효율적으로 사용
  3.  HTTP 방식은 중복된 Header가 계속 전송되고, 이는 게임서버에 꼭 전송될 필요가 없지만 '정규 규약'의 이유로 매 Connection마다 실려서 전송된다.
    1. 때문에 게임서버로 Thrift와 같은 TCP 통신을 선택하려는 고민이 있었다.


Handshake

Websocket Handshake는 재미있는 점이 있다.
바로 Upgrade 라는 헤더인데. 'websocket' 으로 지정되어 있다.
분명히 지금은 GET 타입으로 보내고 있지만, 서버에서 스위칭 시켜준다.

1. Client -> Server 
 GET /chat HTTP/1.1
        Host: server.example.com
        Upgrade: websocket
        Connection: Upgrade
        Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
        Origin: http://example.com
        Sec-WebSocket-Protocol: chat, superchat
        Sec-WebSocket-Version: 13

 

2. Server -> Client

  HTTP/1.1 101 Switching Protocols
        Upgrade: websocket
        Connection: Upgrade
        Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=


'101 Switching Protocols' 가 response로 오면 Websocket 연결이 된 것이다.

그 이후로는 Socket Event를 등록하여 Emit (메시지 전송) , socket.on (메시지 리스닝) 를 사용하면 된다.

클라 - 서버 양방향 통신이므로 서버에서 원하는 시점에 클라이언트로 Emit (메시지 전송) 을 날리면 바로 클라이언트가 응답한다.


예시

웹 화면에 거래량을 보여주는 차트가 있다고 하면 이 차트는 자신이 포함된 웹페이지가 뜨는 순간에 거래량을 보여주는 차트이고, 시간이 지나면 과거의 정보를 보여주게 됩니다. 그래서 만약 지금의 거래량을 보고 싶다면 다시 웹 페이지를 띄워야 한다. 하지만 websocket으로 통신한다면 웹 페이지의 리프레쉬 없이 바로바로 차트가 최신 정보로 갱신될 수 있다.


참고

http://gorans.tistory.com/212

http://d2.naver.com/helloworld/1336


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함