별의 공부 블로그 🧑🏻‍💻

WebSocket

Programming/HTML5 2017. 5. 19. 22:18
728x90
728x170

* WebSocket이란?

- WebSocket은 서버와 실시간으로 쌍방향 통신을 하기 위한 장치임.

- 통상 HTTP 프로토콜에서는 리퀘스트/리스폰스 모델로 통신을 수행하지만, WebSocket에서는 TCP/IP상의 독자적인 프로토콜을 통해 통신을 수행함.

- WebSocket은 드래프트75(hixie-75)판 이전과 드래프트76(ietf-hybi-00)판 이후의 사양과 프로토콜의 호환성이 없음.

- 웹 브라우저가 자원하고 있는 버전과 서버가 지원하는 버전이 일치하도록 해야 할 필요가 있음.

 

 

 IE

Firefox 

Chrome 

Safari 

Opera 

 hixie-76/hybi-00

 

 

5.0.1 

11(무효)※ 

 hybi-07

 

6

 

 

 

 hybi-10

7

 14

 

 

 

 RFC 6455

10

11

16

 

 

※ Opera에서는 기본값이 무효로 되어 있기 때문에 유효하게 하려면 설정이 필요함.

 

 

* JavaScript에 의한 클라이언트 지원 방법

- WebSocket 서버와 통신할 클라이언트를 지원하려면 서버의 URL을 인수로 지정하여 WebSocket 오브젝트를 인스턴스화해야 함.

 

var ws = new WebSocket("ws://example.com/ws.jsp");

                    서버의 URL은 'ws://' 또는 'wss://'로 시작함. 'ws://'는 WebSocket 프로토콜을, 'wss://'은 암호화된 WebSocket 프로토콜을 나타냄.

 

 

[데이터 송수신]

 

- 송신은 send(message) 메서드를, 수신은 onmessage 이벤트 핸들러를 사용함.

- 수신한 데이터는 수신 이벤트의 이벤트 인수 'data' 속성으로 추출할 수 있음.

- 모두 결과를 기다리지 않고 비동기적으로 처리됨.

 

ws.onmessage = function(event) {

var data = event.data;

/* 데이터의 수신 시의 처리 */

}

 

ws.onerror = function(event) {

/* 오류 처리 */

}

 

ws.send("송신 데이터");

 

 

[접속 해제 처리]

 

- WebSocket 통신은 비동기 쌍방향 통신이기 때문에 타임아웃이 될 것인지를 명시적으로 지시하지 않는 한 끊어지지 않음.

- 해제 처리에는 'close([code].[reason])' 메서드와 'onclose' 이벤트 핸들러를 이용해야 함.

- 'close'의 인수는 모두 생략 가능함.

 

we.onclose = function(event) {

if(event.wasClean) {

/* wasClean이 true이면 해제 처리가 정상적으로 완료된 것임. */

}

}

 

window.onunload = function(event) {

ws.close(4500, "이유");

서버와 약정한 해제 코드 

}

 

 

* 서브 프로토콜이란?

- 서브 프로토콜은 WebSocket 통신에서 주고받는 데이터의 종류나 형식 등 통신의 종류를 나타내는 것으로, 서브 프로토콜을 사용하여 처리를 나눔으로써 동일한 서버와 다른 종류의 데이터를 병행하여 주고받을 수 있음.

 

 

[서브 프로토콜을 사용한 분기 처리]

 

- 서브 프로토콜을 지정하려면 WebSocket 오브젝트를 인스턴스화할 때 생략 가능한 제2인수에 서브 프로토콜명을 지정해야 함.

- 서브 프로토콜명은 서버 측과 미리 정한 US-ASCII 범위의 임의의 문자열임.

 

// 여러 개의 후보를 저장한 서브 프로토콜의 배열을 생성

var protocols = ["chatA", "chatB"];

 

// 제2인수에 서브 프로토콜의 배열을 지정

var ws = new WebSocket("ws://example.com/ws", protocols);

 

// "file" 서브 프로토콜용의 클라이언트를 생성

var ws2 = new WebSocket("ws://example.com/ws", "file");

 

// 수신 이벤트의 핸들링

ws.onmessage = function(event) {

var protocol = event.target.protocol;        // 서버가 선택한 서브 프로토콜은 WebSocket 오브젝트의 protocol 속성에 저장됨.

/* 서브 프로토콜에 따라 처리를 나눔. */

}

 

 

[지원 상황]

 

 

IE 

Firefox 

Opera 

Safari 

Chrome 

WebSocket

X

O

 △

O

O

 

 

내용 출처 : HTML5가 보이는 그림책 (ANK Co., Ltd 저, 성안당)

728x90
그리드형(광고전용)

'Programming > HTML5' 카테고리의 다른 글

[textarea] 영역 크기 조절 방지  (0) 2021.04.19
(X)HTML 요점 정리  (0) 2017.05.20
Server-Sent Events  (0) 2017.05.19
Web Messaging  (0) 2017.05.19
ApplicationCache  (0) 2017.05.19
Web Workers  (0) 2017.05.19
File API  (0) 2017.05.19
Indexed Database API  (0) 2017.05.19
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️


📖 Contents 📖