Websockt 이야기
역사적 배경
Websockt에 대해 이야기하기 전에 먼저 푸시 기술에 대해 이야기합시다.
윤문하다
이것은 브라우저가 서버에 HTTP 요청을 보내고 서버에서 클라이언트의 브라우저에 최신 데이터를 되돌려주는 특정한 시간 간격 (예: 1초당) 입니다.이러한 전통적인 모델은 브라우저가 끊임없이 서버에 요청을 해야 한다는 뚜렷한 단점을 가져왔다. 그러나 HTTP 요청은 비교적 긴 머리를 포함할 수 있다. 그 중에서 진정으로 효과적인 데이터는 아주 작은 일부분에 불과할 수 있고 이것은 많은 대역폭 등 자원을 낭비할 수 있다.
Comet
긴 폴링 _,_를 포함한 새로운 기술 비교iframe 흐름, 이런 기술은 양방향 통신이 가능하지만 반복적으로 요청을 해야 합니다.그리고 Comet에서 보편적으로 사용되는 긴 링크는 서버 자원을 소모하기도 한다.
긴 폴링
긴 폴링은 연결을 연 후에 유지하고 서버가 데이터를 전송할 때까지 기다린 후에 닫는 방식이다.
iframe 흐름
iframe 흐름 방식은 페이지에 숨겨진 iframe를 삽입하고 src 속성을 이용하여 서버와 클라이언트 사이에 긴 링크를 만들어 서버가 iframe에 데이터를 전송하는 것(일반적으로 HTML, 정보 삽입을 담당하는 자바스크립트)으로 페이지를 실시간으로 업데이트합니다.
iframe 흐름 방식의 장점은 브라우저 호환이 좋다는 것이다. Google은 일부 제품에서 Google Talk와 같은 iframe 흐름을 사용했다.
웹sockt의 탄생
이런 상황에서 HTML5는 웹 소켓 프로토콜을 정의하여 서버 자원과 대역폭을 더욱 절약하고 더욱 실시간으로 통신할 수 있도록 한다.
프로토콜 ID
Websocket은 ws나 wss의 통일된 자원 표지부를 사용하는데 HTTPS와 유사하다. 그 중에서 wss는 TLS 위에 있는 Websocket을 나타낸다.예:ws://example.com/wsapi
wss://secure.example.com/
포트 사용
Websocket은 HTTP와 같은 TCP 포트를 사용하여 대부분의 방화벽을 우회할 수 있습니다.기본적으로 Websocket 프로토콜은 80 포트를 사용합니다.TLS 위에서 실행할 때 기본적으로 443 포트가 사용됩니다.ws://example.com:80/some/path //80
wss://example.com:443/some/path //443
소개 정의
WebSocket은 단일 TCP 연결에서 전이중 통신을 하는 프로토콜입니다.
WebSocket 협의는 2008년에 탄생했고 2011년에 국제 표준이 되었다.모든 브라우저가 지원됩니다.WebSocket API에서 브라우저와 서버는 악수를 한 번만 하면 지속적인 연결을 만들고 양방향 데이터 전송을 할 수 있다.그것의 가장 큰 특징은 서버가 클라이언트에게 주동적으로 정보를 전송할 수 있고 클라이언트도 주동적으로 서버에 정보를 전송할 수 있다는 것이다. 이것은 진정한 쌍방향 평등 대화로 서버 전송 기술의 하나에 속한다.
특징
이런 상황에서 HTML5는 웹 소켓 프로토콜을 정의하여 서버 자원과 대역폭을 더욱 절약하고 더욱 실시간으로 통신할 수 있도록 한다.
프로토콜 ID
Websocket은 ws나 wss의 통일된 자원 표지부를 사용하는데 HTTPS와 유사하다. 그 중에서 wss는 TLS 위에 있는 Websocket을 나타낸다.예:
ws://example.com/wsapi
wss://secure.example.com/
포트 사용
Websocket은 HTTP와 같은 TCP 포트를 사용하여 대부분의 방화벽을 우회할 수 있습니다.기본적으로 Websocket 프로토콜은 80 포트를 사용합니다.TLS 위에서 실행할 때 기본적으로 443 포트가 사용됩니다.
ws://example.com:80/some/path //80
wss://example.com:443/some/path //443
소개 정의
WebSocket은 단일 TCP 연결에서 전이중 통신을 하는 프로토콜입니다.
WebSocket 협의는 2008년에 탄생했고 2011년에 국제 표준이 되었다.모든 브라우저가 지원됩니다.WebSocket API에서 브라우저와 서버는 악수를 한 번만 하면 지속적인 연결을 만들고 양방향 데이터 전송을 할 수 있다.그것의 가장 큰 특징은 서버가 클라이언트에게 주동적으로 정보를 전송할 수 있고 클라이언트도 주동적으로 서버에 정보를 전송할 수 있다는 것이다. 이것은 진정한 쌍방향 평등 대화로 서버 전송 기술의 하나에 속한다.
특징
악수 협의
WebSocket은 독립적이고 TCP에 작성된 프로토콜입니다.
웹소켓은 HTTP/1.1 프로토콜의 101 상태 코드를 통해 악수를 합니다.
웹소켓 연결을 만들기 위해서는 브라우저를 통해 요청을 보내고 서버가 응답해야 합니다. 이 과정을 흔히'악수'(handshaking)라고 합니다.
일반적인 Websocket 악수 요청은 다음과 같습니다.
클라이언트 요청
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.com
Origin: http://example.com
Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
Sec-WebSocket-Version: 13
서버 응답
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=
Sec-WebSocket-Location: ws://example.com/
Connection은 클라이언트가 연결 업그레이드를 원한다는 의미로 Upgrade를 설정해야 합니다.Upgrade 필드는 Websocket 프로토콜로 업그레이드할 수 있도록 Websocket을 설정해야 합니다.Sec-WebSocket-Key는 무작위 문자열로 서버 측에서 이 데이터로 SHA-1의 정보 요약을 구성합니다."Sec-WebSocket-Key"에 특수 문자열인 "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"을 추가하고 SHA-1 요약을 계산한 후 BASE-64 인코딩을 진행하여 결과를 "Sec-WebSocket-Accept"헤더의 값으로 하고 클라이언트에게 되돌려줍니다.이렇게 하면 일반적인 HTTP 요청이 웹소켓 프로토콜로 오인되는 것을 최대한 피할 수 있다.Sec-WebSocket-Version 은 지원되는 Websocket 버전을 나타냅니다.RFC6455는 이전 초안의 버전은 모두 폐기되어야 하는 13 버전을 사용해야 합니다.
클라이언트의 간단한 예
다음은 웹 스크립트의 예입니다. 기본적으로 한눈에 알 수 있습니다.var ws = new WebSocket("wss://echo.websocket.org");
ws.onopen = function(evt) {
console.log("Connection open ...");
ws.send("Hello WebSockets!");
};
ws.onmessage = function(evt) {
console.log( "Received Message: " + evt.data);
ws.close();
};
ws.onclose = function(evt) {
console.log("Connection closed.");
};
여기서 WebSocket 객체는 새 WebSocket 인스턴스에 사용되는 구조 함수입니다.실례 대상의 모든 속성과 방법 목록은 여기를 참조하십시오.
서비스 측의 실현
서버의 경우, 인터넷에는 웹소켓에 지원되는 서버가 다릅니다.
php-http://code.google.com/p/phpw...jetty-http://jetty.codehaus.org/jetty/(버전 7부터 웹소켓 지원) [영구 실효 링크] netty-http://www.jboss.org/nettyruby-http://github.com/gimite/web-...Kaazing-https://web.archive.org/web/2...://www.kaazing.org/confluence/display/KAAZING/HomeTomcat-http://tomcat.apache.org/(7.0.27 웹소켓 지원, tomcat8, 7.0.27 인터페이스를 사용하는 것이 권장됨) WebLogic-http://www.oracle.com/us/prod...(12.1.2부터 지원) [영구 실효 링크] node.js-https://github.com/Worlize/We...node.js-http://socket.ionginx-http://nginx.com/mojolicious-http://mojolicio.us/python-https://github.com/abourget/g...Django-https://github.com/stephenmcd...erlang-https://github.com/ninenines/...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
var ws = new WebSocket("wss://echo.websocket.org");
ws.onopen = function(evt) {
console.log("Connection open ...");
ws.send("Hello WebSockets!");
};
ws.onmessage = function(evt) {
console.log( "Received Message: " + evt.data);
ws.close();
};
ws.onclose = function(evt) {
console.log("Connection closed.");
};
서버의 경우, 인터넷에는 웹소켓에 지원되는 서버가 다릅니다.
php-http://code.google.com/p/phpw...jetty-http://jetty.codehaus.org/jetty/(버전 7부터 웹소켓 지원) [영구 실효 링크] netty-http://www.jboss.org/nettyruby-http://github.com/gimite/web-...Kaazing-https://web.archive.org/web/2...://www.kaazing.org/confluence/display/KAAZING/HomeTomcat-http://tomcat.apache.org/(7.0.27 웹소켓 지원, tomcat8, 7.0.27 인터페이스를 사용하는 것이 권장됨) WebLogic-http://www.oracle.com/us/prod...(12.1.2부터 지원) [영구 실효 링크] node.js-https://github.com/Worlize/We...node.js-http://socket.ionginx-http://nginx.com/mojolicious-http://mojolicio.us/python-https://github.com/abourget/g...Django-https://github.com/stephenmcd...erlang-https://github.com/ninenines/...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.