SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
WebSocket 기반 쌍방향 메시징

        이희승
차세대 웹의 쌍방향 통신
  표준인 WebSocket
 프로토콜을 이해한다.
목차
• 등장 배경
•   프로토콜 라라
•   클라이언트 구현
•   서버 구현
•   앞으로의 전망
Web 2.0
• 풍부한 사용자 경험
 – AJAX, DHTML, CSS, …
 – Rich Internet Application
• 리프레시 없는 쌍방향 통신 (aka Comet)
 – Long Polling
 – Piggybacking
 – Hidden <iframe/>
한계
• HTTP
 – 무상태
 – 단방향 스스 · 요청 짝짓기
 – 불완전한 스 스스스스
• 환경에 따른 복잡한 구현 전략
 – 언제 끊어질 지 모른다!
 – 브라우저 · 서버 모두 복잡
 – 프록시
목차
• 등장 배경
• 프로토콜 소개
• 클라이언트 구현
• 서버 구현
• 앞으로의 전망
특징
• HTML5 ‘표준’
 – 브라우저 · 서버 모두 간결
 – 프록시 지원 기대
• 커넥션 기반
• 양방향 풀 듀플렉스
• TCP/IP 소켓을 직접 다루듯
Handshake - Request
GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: 12998 5 Y3 1 .P00
Sec-WebSocket-Protocol: sample
Upgrade: WebSocket
Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5
Origin: http://example.com

^n:ds[4U
Handshake - Response
HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Location: ws://example.com/demo
Sec-WebSocket-Protocol: sample

8jKS'y:G*Co,Wxa-
Handshake - Verification
 K1 = “4 @1 46546xW%0l 1 5”
 K2 = “12998 5 Y3 1 .P00”
  A = digitsOnly(K1) / countWhitespace(K1)
    = 4146546015 / 5 = 829309203 = 0x316E4113 (32b)
  B = digitsOnly(K2) / countWhitespace(K2)
    = 1299853100 / 5 = 259970620 = 0x0F7ED63C (32b)
  C = req.getContent()
    = “^n:ds[4U” = 0x5E6E3A64735B3455 (64b)
 IN = concat(A, B, C)
    = 0x 316E4113 0F7ED63C 5E6E3A64735B3455 (128b)
OUT = md5sum(IN)
    = 0x386a4B5327793A472A436F2C5778612D (128b)
    = res.getContent()
    = “8jKS'y:G*Co,Wxa-”
Data Frame
• Handshake 후 어느 쪽에서든 전송 가능
• Text Frame
  – Type + UTF8 String + Terminator
  – “Hello, World!”
  – 00 48656C6C6F2C20576F726C6421 FF
• Binary Frame
  – 현재는 쓰이지 않으나 예약됨
Closing Handshake
• 연결을 닫고자 하는 쪽에서 Type 이
  0xFF이고 길이가 0x00인 바이너리
  프레임 전송:

       0xFF 0x00
• 서로 주고 받은 후 연결 종료
목차
• 등장 배경
• 프로토콜 소개
• 클라이언트 구현
• 서버 구현
• 앞으로의 전망
지원 브라우저
• HTML5 지원 브라우저
 – Google Chrome 4+
 – Firefox 3.7pre
 – Apple Safari
• SWF 브리지
 – Firefox 3.0 ~ 3.6
 – Internet Explorer 6+
 – Opera 9+
예제
if (!window.WebSocket) alert(“UNSUPPORTED”)

var s = new   WebSocket("ws://localhost:8080/demo")
s.onmessage   = function(evt) { alert(evt.data) }
s.onopen      = function(evt) { alert(“OPEN")   }
s.onclose     = function(evt) { alert(“CLOSED") }

function send(message) {
  if (s.readyState == WebSocket.OPEN)
    s.send(message)
  else
    alert(“NOT OPEN")
}
목차
• 등장 배경
• 프로토콜 소개
• 클라이언트 구현
• 서버 구현
• 앞으로의 전망
지원 서버
• API 표준화는 아직
• Standalone
  – Netty (from JBoss)
  – Grizzly
  – jWebSocket (via Netty)
• Servlet Containers
  – 확장 기능으로 제공
  – Jetty 8
  – Glassfish (via Grizzly)
목차
•   등장 배경
•   프로토콜 소개
•   클라이언트 구현
•   서버 구현
• 앞으로의 전망
앞으로의 전망
• 아직은 IETF Draft
  – 스펙 변경 예상
    • Draft 75 vs. 76
  – 직접 구현보다는 신뢰할만한 라이브러리로
    • Netty를 추천
• 프록시 구현 변경 필요
  – 프록시 사용이 거의 없는 일반 이용자부터
• 브라우저 뿐만 아니라 다양한 곳에서
  – WebSocket 을 통해 JMS 큐에 직접 연결
    • HornetQ를 추천
참고 자료
• WebSocket IETF Draft
   – http://www.whatwg.org/specs/web-socket-protocol/
• WebSockets.org
   – http://www.websockets.org/
• Netty Project
   – http://jboss.org/netty/
• Flash Bridge
   – http://github.com/gimite/web-socket-js
• HornetQ
   – http://jboss.org/hornetq/
- 감사합니다 -

Weitere ähnliche Inhalte

Was ist angesagt?

맛만 보자 Undertow
맛만 보자 Undertow맛만 보자 Undertow
맛만 보자 Undertowjbugkorea
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.sung ki choi
 
Network 초보자를 위한 Netty
Network 초보자를 위한 NettyNetwork 초보자를 위한 Netty
Network 초보자를 위한 NettyChoulhyouc Lee
 
이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012devCAT Studio, NEXON
 
[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket io[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket ioNAVER D2
 
Meteor 0.3.6 Preview
Meteor 0.3.6 PreviewMeteor 0.3.6 Preview
Meteor 0.3.6 PreviewJuntai Park
 
자바 서블릿과 세션 (Java Servlet, Session)
자바 서블릿과 세션 (Java Servlet, Session)자바 서블릿과 세션 (Java Servlet, Session)
자바 서블릿과 세션 (Java Servlet, Session)Yu Yongwoo
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스WebFrameworks
 
Websocket.. whit http, tcp
Websocket.. whit http, tcpWebsocket.. whit http, tcp
Websocket.. whit http, tcpdana238767
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Gitaek kwon
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?Opennaru, inc.
 
노드js 기초
노드js 기초 노드js 기초
노드js 기초 경륜 이
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기John Kim
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet ArchitectureJU Chae
 
Node.js Cloud Service Publish
Node.js Cloud Service PublishNode.js Cloud Service Publish
Node.js Cloud Service PublishHyun Jin Moon
 
모듈시스템과 webpack
모듈시스템과 webpack모듈시스템과 webpack
모듈시스템과 webpackDataUs
 
서블릿(servlet)
서블릿(servlet)서블릿(servlet)
서블릿(servlet)JungHoon Lee
 

Was ist angesagt? (20)

맛만 보자 Undertow
맛만 보자 Undertow맛만 보자 Undertow
맛만 보자 Undertow
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
 
Network 초보자를 위한 Netty
Network 초보자를 위한 NettyNetwork 초보자를 위한 Netty
Network 초보자를 위한 Netty
 
이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012이승재, 실시간 HTTP 양방향 통신, NDC2012
이승재, 실시간 HTTP 양방향 통신, NDC2012
 
[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket io[Hello world 오픈세미나]vertx&socket io
[Hello world 오픈세미나]vertx&socket io
 
Node
NodeNode
Node
 
Meteor 0.3.6 Preview
Meteor 0.3.6 PreviewMeteor 0.3.6 Preview
Meteor 0.3.6 Preview
 
자바 서블릿과 세션 (Java Servlet, Session)
자바 서블릿과 세션 (Java Servlet, Session)자바 서블릿과 세션 (Java Servlet, Session)
자바 서블릿과 세션 (Java Servlet, Session)
 
Servlet3
Servlet3Servlet3
Servlet3
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스
 
Websocket.. whit http, tcp
Websocket.. whit http, tcpWebsocket.. whit http, tcp
Websocket.. whit http, tcp
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교
 
Websocket
WebsocketWebsocket
Websocket
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
 
노드js 기초
노드js 기초 노드js 기초
노드js 기초
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기
 
Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet Architecture
 
Node.js Cloud Service Publish
Node.js Cloud Service PublishNode.js Cloud Service Publish
Node.js Cloud Service Publish
 
모듈시스템과 webpack
모듈시스템과 webpack모듈시스템과 webpack
모듈시스템과 webpack
 
서블릿(servlet)
서블릿(servlet)서블릿(servlet)
서블릿(servlet)
 

Ähnlich wie WebSocket 기반 쌍방향 메시징

WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010Joone Hur
 
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)DK Lee
 
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션미래웹기술연구소 (MIRAE WEB)
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.xTerry Cho
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
멀티클라우드 Service Mesh
멀티클라우드 Service Mesh멀티클라우드 Service Mesh
멀티클라우드 Service MeshJeong-Ho Na
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js연웅 조
 
Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Channy Yun
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우jieunsys
 
프로젝트용 PC 환경구성 이찬희
프로젝트용 PC 환경구성   이찬희프로젝트용 PC 환경구성   이찬희
프로젝트용 PC 환경구성 이찬희찬희 이
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기John Kim
 
HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션Lee Geonhee
 
댓글 플러그인 아포가토
댓글 플러그인 아포가토댓글 플러그인 아포가토
댓글 플러그인 아포가토Goonoo Kim
 
[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How ToJi-Woong Choi
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy흥래 김
 
Spring 4.x Web Application 살펴보기
Spring 4.x Web Application  살펴보기Spring 4.x Web Application  살펴보기
Spring 4.x Web Application 살펴보기Ji Heon Kim
 

Ähnlich wie WebSocket 기반 쌍방향 메시징 (20)

Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010WebKit at the Future Web Forum 2010
WebKit at the Future Web Forum 2010
 
Web Socket API
Web Socket APIWeb Socket API
Web Socket API
 
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
 
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션
Kaazing - 웹소켓 기술의 유일한 엔터프라이즈 솔루션
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
멀티클라우드 Service Mesh
멀티클라우드 Service Mesh멀티클라우드 Service Mesh
멀티클라우드 Service Mesh
 
kt-cloud
kt-cloudkt-cloud
kt-cloud
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 
Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우
 
프로젝트용 PC 환경구성 이찬희
프로젝트용 PC 환경구성   이찬희프로젝트용 PC 환경구성   이찬희
프로젝트용 PC 환경구성 이찬희
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
 
HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션
 
댓글 플러그인 아포가토
댓글 플러그인 아포가토댓글 플러그인 아포가토
댓글 플러그인 아포가토
 
[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy
 
Spring 4.x Web Application 살펴보기
Spring 4.x Web Application  살펴보기Spring 4.x Web Application  살펴보기
Spring 4.x Web Application 살펴보기
 

Mehr von trustinlee

사용자 경험 극대화를 위한 웹 서버 아키텍처
사용자 경험 극대화를 위한 웹 서버 아키텍처사용자 경험 극대화를 위한 웹 서버 아키텍처
사용자 경험 극대화를 위한 웹 서버 아키텍처trustinlee
 
APIviz – Java API Visualizer
APIviz – Java API VisualizerAPIviz – Java API Visualizer
APIviz – Java API Visualizertrustinlee
 
Rapid Network Application Development with Apache MINA
Rapid Network Application Development with Apache MINARapid Network Application Development with Apache MINA
Rapid Network Application Development with Apache MINAtrustinlee
 
Apache MINA를 사용한 네트워크 어플리케이션 개발
Apache MINA를 사용한 네트워크 어플리케이션 개발Apache MINA를 사용한 네트워크 어플리케이션 개발
Apache MINA를 사용한 네트워크 어플리케이션 개발trustinlee
 
자바 네트워킹 기초에서 응용까지
자바 네트워킹 기초에서 응용까지자바 네트워킹 기초에서 응용까지
자바 네트워킹 기초에서 응용까지trustinlee
 
JBoss Middleware 및 Remoting 프로젝트 소개
JBoss Middleware 및 Remoting 프로젝트 소개JBoss Middleware 및 Remoting 프로젝트 소개
JBoss Middleware 및 Remoting 프로젝트 소개trustinlee
 
오픈 소스 프로젝트 참여를 통한 개발자 커리어 관리
오픈 소스 프로젝트 참여를 통한 개발자 커리어 관리오픈 소스 프로젝트 참여를 통한 개발자 커리어 관리
오픈 소스 프로젝트 참여를 통한 개발자 커리어 관리trustinlee
 
오픈 소스 소개
오픈 소스 소개오픈 소스 소개
오픈 소스 소개trustinlee
 

Mehr von trustinlee (8)

사용자 경험 극대화를 위한 웹 서버 아키텍처
사용자 경험 극대화를 위한 웹 서버 아키텍처사용자 경험 극대화를 위한 웹 서버 아키텍처
사용자 경험 극대화를 위한 웹 서버 아키텍처
 
APIviz – Java API Visualizer
APIviz – Java API VisualizerAPIviz – Java API Visualizer
APIviz – Java API Visualizer
 
Rapid Network Application Development with Apache MINA
Rapid Network Application Development with Apache MINARapid Network Application Development with Apache MINA
Rapid Network Application Development with Apache MINA
 
Apache MINA를 사용한 네트워크 어플리케이션 개발
Apache MINA를 사용한 네트워크 어플리케이션 개발Apache MINA를 사용한 네트워크 어플리케이션 개발
Apache MINA를 사용한 네트워크 어플리케이션 개발
 
자바 네트워킹 기초에서 응용까지
자바 네트워킹 기초에서 응용까지자바 네트워킹 기초에서 응용까지
자바 네트워킹 기초에서 응용까지
 
JBoss Middleware 및 Remoting 프로젝트 소개
JBoss Middleware 및 Remoting 프로젝트 소개JBoss Middleware 및 Remoting 프로젝트 소개
JBoss Middleware 및 Remoting 프로젝트 소개
 
오픈 소스 프로젝트 참여를 통한 개발자 커리어 관리
오픈 소스 프로젝트 참여를 통한 개발자 커리어 관리오픈 소스 프로젝트 참여를 통한 개발자 커리어 관리
오픈 소스 프로젝트 참여를 통한 개발자 커리어 관리
 
오픈 소스 소개
오픈 소스 소개오픈 소스 소개
오픈 소스 소개
 

WebSocket 기반 쌍방향 메시징

  • 1. WebSocket 기반 쌍방향 메시징 이희승
  • 2. 차세대 웹의 쌍방향 통신 표준인 WebSocket 프로토콜을 이해한다.
  • 3. 목차 • 등장 배경 • 프로토콜 라라 • 클라이언트 구현 • 서버 구현 • 앞으로의 전망
  • 4. Web 2.0 • 풍부한 사용자 경험 – AJAX, DHTML, CSS, … – Rich Internet Application • 리프레시 없는 쌍방향 통신 (aka Comet) – Long Polling – Piggybacking – Hidden <iframe/>
  • 5. 한계 • HTTP – 무상태 – 단방향 스스 · 요청 짝짓기 – 불완전한 스 스스스스 • 환경에 따른 복잡한 구현 전략 – 언제 끊어질 지 모른다! – 브라우저 · 서버 모두 복잡 – 프록시
  • 6. 목차 • 등장 배경 • 프로토콜 소개 • 클라이언트 구현 • 서버 구현 • 앞으로의 전망
  • 7. 특징 • HTML5 ‘표준’ – 브라우저 · 서버 모두 간결 – 프록시 지원 기대 • 커넥션 기반 • 양방향 풀 듀플렉스 • TCP/IP 소켓을 직접 다루듯
  • 8. Handshake - Request GET /demo HTTP/1.1 Host: example.com Connection: Upgrade Sec-WebSocket-Key2: 12998 5 Y3 1 .P00 Sec-WebSocket-Protocol: sample Upgrade: WebSocket Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5 Origin: http://example.com ^n:ds[4U
  • 9. Handshake - Response HTTP/1.1 101 WebSocket Protocol Handshake Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Location: ws://example.com/demo Sec-WebSocket-Protocol: sample 8jKS'y:G*Co,Wxa-
  • 10. Handshake - Verification K1 = “4 @1 46546xW%0l 1 5” K2 = “12998 5 Y3 1 .P00” A = digitsOnly(K1) / countWhitespace(K1) = 4146546015 / 5 = 829309203 = 0x316E4113 (32b) B = digitsOnly(K2) / countWhitespace(K2) = 1299853100 / 5 = 259970620 = 0x0F7ED63C (32b) C = req.getContent() = “^n:ds[4U” = 0x5E6E3A64735B3455 (64b) IN = concat(A, B, C) = 0x 316E4113 0F7ED63C 5E6E3A64735B3455 (128b) OUT = md5sum(IN) = 0x386a4B5327793A472A436F2C5778612D (128b) = res.getContent() = “8jKS'y:G*Co,Wxa-”
  • 11. Data Frame • Handshake 후 어느 쪽에서든 전송 가능 • Text Frame – Type + UTF8 String + Terminator – “Hello, World!” – 00 48656C6C6F2C20576F726C6421 FF • Binary Frame – 현재는 쓰이지 않으나 예약됨
  • 12. Closing Handshake • 연결을 닫고자 하는 쪽에서 Type 이 0xFF이고 길이가 0x00인 바이너리 프레임 전송: 0xFF 0x00 • 서로 주고 받은 후 연결 종료
  • 13. 목차 • 등장 배경 • 프로토콜 소개 • 클라이언트 구현 • 서버 구현 • 앞으로의 전망
  • 14. 지원 브라우저 • HTML5 지원 브라우저 – Google Chrome 4+ – Firefox 3.7pre – Apple Safari • SWF 브리지 – Firefox 3.0 ~ 3.6 – Internet Explorer 6+ – Opera 9+
  • 15. 예제 if (!window.WebSocket) alert(“UNSUPPORTED”) var s = new WebSocket("ws://localhost:8080/demo") s.onmessage = function(evt) { alert(evt.data) } s.onopen = function(evt) { alert(“OPEN") } s.onclose = function(evt) { alert(“CLOSED") } function send(message) { if (s.readyState == WebSocket.OPEN) s.send(message) else alert(“NOT OPEN") }
  • 16. 목차 • 등장 배경 • 프로토콜 소개 • 클라이언트 구현 • 서버 구현 • 앞으로의 전망
  • 17. 지원 서버 • API 표준화는 아직 • Standalone – Netty (from JBoss) – Grizzly – jWebSocket (via Netty) • Servlet Containers – 확장 기능으로 제공 – Jetty 8 – Glassfish (via Grizzly)
  • 18. 목차 • 등장 배경 • 프로토콜 소개 • 클라이언트 구현 • 서버 구현 • 앞으로의 전망
  • 19. 앞으로의 전망 • 아직은 IETF Draft – 스펙 변경 예상 • Draft 75 vs. 76 – 직접 구현보다는 신뢰할만한 라이브러리로 • Netty를 추천 • 프록시 구현 변경 필요 – 프록시 사용이 거의 없는 일반 이용자부터 • 브라우저 뿐만 아니라 다양한 곳에서 – WebSocket 을 통해 JMS 큐에 직접 연결 • HornetQ를 추천
  • 20. 참고 자료 • WebSocket IETF Draft – http://www.whatwg.org/specs/web-socket-protocol/ • WebSockets.org – http://www.websockets.org/ • Netty Project – http://jboss.org/netty/ • Flash Bridge – http://github.com/gimite/web-socket-js • HornetQ – http://jboss.org/hornetq/