티스토리 뷰
출처
http://blog.naver.com/joebak/220516030309
개요
* HTML5 에서 소개한 양방향 통신 프로토콜
* 아직 표준은 아님.
* HTTP와 비교시 장단점
장점: Server 에서 Client로 바로 Event를 줄 수 있다는 점에서 성능향 효율적이다. (polling 과 같이 불필요한 request 가 없어도 됨)
단점: 코드 수준에서의 관리가 어렵다. 이벤트 방식이기 때문에 Event Listener 등록, Event 함수 등록해서 사용해야 함.
개발단계에서 Connection, Event 발생, Close를 다 해줘야 하므로, 서버개발자가 Test용 Client 어플리케이션을 직접 개발해가며 테스트해야 한다.
특징
- 'http://' 와 다르게 'ws://' 와 같은 Web Socket Structure를 사용한다.
- Polling, Long Polling 방식과 달리 Connection 을 효율적으로 사용
- HTTP 방식은 중복된 Header가 계속 전송되고, 이는 게임서버에 꼭 전송될 필요가 없지만 '정규 규약'의 이유로 매 Connection마다 실려서 전송된다.
- 때문에 게임서버로 Thrift와 같은 TCP 통신을 선택하려는 고민이 있었다.
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으로 통신한다면 웹 페이지의 리프레쉬 없이 바로바로 차트가 최신 정보로 갱신될 수 있다.
참고
'웹 프로그래밍' 카테고리의 다른 글
[PHP,보안] PDO prepared Statements..? (1) | 2016.02.17 |
---|---|
[PHP] GD 라이브러리를 이용한 이미지 리사이징&자르기 (1) | 2016.02.02 |
[jQuery] 제이쿼리 셀렉터!! (0) | 2015.12.29 |
[facebook] 페이스북 공유하기 로직 & 페북 프로필 이미지 가져오기 (0) | 2015.12.10 |
[Mysql] set names euckr ?? db와 html 캐릭터 인코딩셋이 다른경우 (0) | 2015.11.25 |