websocket 정리(작성중..)
내가만든 java용 webSocketServer library
wakeup5_JavaWebSocketServer_v0.1.jar
1. 웹소켓 지원 브라우저
(출처 - http://caniuse.com/#feat=websockets)
Current에 있는 것이 현재 버전이고
초록색이 지원, 분홍색이 미지원 브라우저.
(현재 대부분의 브라우저가 지원을 하는데 안드로이드는 이제야 지원하는 것 보니 왜 진즉에 안했나 싶음.. 유저에게 업데이트를 강제할 수도 없고 ㅡ.,ㅡ)
2. 웹소켓의 접속 과정
먼저 클라이언트에서 접속 요청을 보내고, 서버에서 요청을 받아 요청 정보를 핸드쉐이크 후 응답을 하면 소켓이 연결이 된다. 그 이후 소켓 통신처럼 스트림을 이용해 데이터를 주고 받을 수 있다.
2-1. 웹소켓의 접속
웹소켓의 접속은 브라우저에서 이루어지며 접속 방법은 다음과 같다.
var ws= new WebSocket('ws://localhost:8080/resources');
접속url은 ws:// 혹은 wss://(http://와 https://랑 같다), 접속할 host와 포트, /이후의 리소스로 이루어 진다.
2-2. 웹소켓 오픈 핸드쉐이크
먼저 요청을 보내고, 서버에서는 요청 헤더를 보고 적절히 응답을 보내야 한다. 이러한 과정을 핸드쉐이크라고 한다.
요청 헤더
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: {host}
Sec-WebSocket-Version: 13
응답 헤더
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
응답 헤더는 HTTP/1.1 101 Switching Protocols로 시작하며
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:
이 세개의 키값은 반드시 포함하여야 한다.
Sec-WebSocket-Accept의 값 만드는 방법
1. 요청 헤더의 Sec-WebSocket-Key 값에 미리 정의된 문자열을 ("258EAFA5-E914-47DA-95CA-C5AB0DC85B11")를 붙여 새로운 문자열을 만든 후,
2. 새로운 문자열을 SHA-1로 암호화.
3. 암호화 된 값을 다시 BASE64로 인코딩 하고 Sec-WebSocket-Accept를 키로하는 응답 헤더를 작성.
여기까지가 연결 핸드쉐이크이며 응답을 받은 클라이언트에서 Sec-WebSocket-Accept값을 비교하여 값이 일치 할 경우 소켓이 연결되며, 데이터를 주고 받을 수 있다.
2-3 웹소켓의 데이터.
0. 웹소켓 정보
웹소켓 api - http://www.w3.org/TR/2011/WD-websockets-20110419/#websocket
웹소켓 문서 - http://tools.ietf.org/html/rfc6455
: 웹소켓 정보에 대해 아주 자세히 나와있으나 영어.. ㅠㅠ
'웹 & 안드로이드 > HTML5' 카테고리의 다른 글
[jQuery]요소를 추가하는 메소드(append, prepend, after, before) (0) | 2014.07.23 |
---|---|
[jQuery]썸네일을 만들어주는 플러그인 NailThumb (0) | 2014.07.23 |
label 태그를 이용하여 폼 컨트롤 다루기. (0) | 2014.06.09 |
[Canvas] canvas를 이용한 좌표계 그리기 (0) | 2014.06.03 |
[Canvas] 연습 (0) | 2014.06.02 |