Network/Web Socket

[Network/Web Socket]01. 웹 소켓

양승길 2016. 8. 30. 17:37

[Network/Web Socket]01. 웹 소켓

http://www.tutorialspoint.com/websockets/websockets_quick_guide.htm

http://m.mkexdev.net/98


개요

Handshaking는 두 사람이 악수하는 것으로 정의할 수있는데, 전산에서 의미는 Server와 Client에서 동기상태를 확신하는 처리하 볼 수 있다.

Mobile이나 PC가 Server에게 요청하고, Server는 Client에게 응답하는 Diagram이 Server가 Client와 Handshake한다고 볼 수 있다.


정의

Web Socket의 정의는 Client와 Server 사이에서 양방향 통신(2-way communication)이라 볼 수 있는데, 이는 동시에 Data를 교환하는 것을 말한다.

Web Socket의 요점은 진동시성(?) - True Concurrency와 처리최적화(?) - Optimization of performance로서 더욱더 반응성이 뛰어나고 풍부한 web application을 결과로 나타낸다(?) - more responsive and rich web application.


특징

Web Socket은 표준화되고 있으며, 이 말인 즉슨 Web Server와 Client사이에서 실시간으로 통신하는 것이 이 Protocol의 도움에 의하여 가능하게 된 것이다.(be possible with the help of this protocol)

Web Socket은 Client와 Server사이에 있는 실시간 통신에 대하여 Cross platform 표준으로 변형시키고 있다.

(Cross platform : https://ko.wikipedia.org/wiki/%ED%81%AC%EB%A1%9C%EC%8A%A4_%ED%94%8C%EB%9E%AB%ED%8F%BC)

이 표준은 새로운 종류의 Application이다. 실시간 Web Application을 위한 업무가 이 기술에 의하여 속도를 향상 시킬 수 있다.

Web Socket의 가장 큰 장점은 단일 TCP 연결을 넘는 양방향 통신을 제공하는 것이다.


URL Pattern

기존 HTTP, HTTPS와 같은 Pattern을 정의한다.

Schema :// host : port / server

Ex ) ws :// localhost:8000:aaa.php


양방향 통신에서 사용되는 기술

Polling : Polling은 전송중에 Data가 존재유무에 대한 관계 없이 주기적 요청을 수행하는 방법으로 정의된다. The periodic requests are sent in a synchronous way. Client는 특정 시간 간격에서 Client에게 주기적인 요청을 한다. Server의 응답은 이에 따라 오류나 어떤 자료들을 포함하여 보내게 된다.


Long Polling : Polling 과 유사한 기술을 가졌다. Server 와 Client는 어떤 Data가 전달 받거나(be fetched) timeout이 발생되기 전에 연결상태를 유지한다. 만약에 연결이 끊어지면 Client는 재시작하여 지속적인 요청을 수행할 수 있다. Long Polling 은 기존 Polling과 다를게 없지만 끊임없는 요청이 처리를 늦추게 할 수 있다.(but constant requests may slow down the process.)


Streaming : 실시간 Data 전송에서 최고의 선택으로 여겨진다. Server는 Client와 함께 Data 를 전송받기까지 연결을 유지하는데, 이 경우에는 무기한으로(indefinitely) 연결이 열려있다고 한다. Streaming은 지연시키면서 File size를 늘리는 HTTP Header를 포함하고 있다. 이는 주 문제점(drawback)으로 여겨진다.


AJAX : javascript의 XmlHttpRequest 객체를 기반으로 되어있는 이 기술은 Asynchronous Javascript and XML의 준말이다. XmlHttpRequest 객체는 완전한 web page를 재적재(?) - reload하지 아니하고 javascript를 실행시킨다. Ajax는 단 한 page에서 Data를 주고 받는다.


HTML5 : Web Application을 design하고 개발하기 위한 강력한 framework다. 즉 javascript의 api와 CSS3, Mark-up을 포함하고 있다는 것이다.


필요성

Server는 요청기반으로 생성된 동적 Server Page들을 허용하는 기술로 발전했다(?)(Server technologies advanced which allowed dynamic server pages - pages whose content was generated based on a query.)

언젠가는 더욱더 동적인 web page를 가진 요구사항이 DHTM의 유효성을 이끌 것이다. javascript 덕분에 몇 년 동안 HTTP polling에 의한 page reload를 피하려는 Cross Frame Communication을 보았었다.

그러나 이 해결책이 실제로 Server와 Client의 사이에있는 표준화된 실시간 양방향(Real-time bi-directional) 통신을 제공하진 않았다.

이는 Web Sockets protocol의 필요성을 증대시켰다. 


기능성

web socket이 존재하기 전, 모든 통신은 HTTP에 의존했었다. Web socket은 끊임없는 전양방향 연결의 동적인 흐름을 제어한다. 전양방향은 양 끝단에서 상당히 빠른 속도를 자랑하는 통신이다. 이는 현존하는 protocol의 모든 결점을 극복한 효율성이 있다.


중요성

Web Socket은 독립적인 TCP 기반의 Protocol이지만 순수 TCP연결로 운영중인 다른 Protocol을 지원하는 목적이 있다. 또한 Web Socket은 다른 Protocol이 실행할 수 있는 상위측에 있는 전송계층 이다. Web Socket API는 특정 Protocol을 interpret 할 수 있는 Protocol library들, 즉 Sub protocol을 정의하는 능력을 지원한다. 개발자는 더이상 요청과 응답이라는 HTTP라는 것에서 생각할 필요가 없다. Browser 측의 요구사항은 Web Socket Handshake를 interpret할 수있는 javascript library를 실행하는 것이다. Server 측에서 볼 표준은 Web Socket Gateway에게 영향을 주는것과 TCP 상단에서 실행하는 Protocol library를 사용하는 것이다.


Web Socket은 전형적으로 Web Socket Handshake를 향상된 요청으로 해석함으로서, HTTP나 HTTP server를 경유하여 초기화한다. Web Socket은 HTTP 환경에서 상호 보완적인 추가물일 수 있고, Web 기능성을 추가하는 필수적 기반 구조를 제공할 수 있다. 또한 client와 server 사이에서 양방향으로 data를 흐르게 하는 전 양방향 protocol에 의존한다. 


연결과정

Client는 web socket handshake라고 알려진 과정을 통해 연결을 설립한다.

이 과정은 Client가 server에게 정기적인 HTTP요청을 보내면서 시작한다.

향상된 Header가 요청된다. 이 요청에서 server는 web socket 연결을 위한 요청이라 알림을 받는다.

ws라 언급한 scheme는 web socket의 URL로 표기하는데 이는 HTTP와 동등한 web socket 연결을 보안하는데 있어 사용되기도 한다.


실행

Web socket은 web만이 아니라 mobile에서도 주 역할을 차지하고 있다. 

Web socket은 말 그대로 web과 관련이 있다. Web browser를 위한 다수의 기술을 구성하는 web은 mobile이나 PC 등을 포함한 수많은 장치들에서 방대한 연결 platform이다.

Web socket이라는 Protocol의 목적은 다음과 같은 주요점에서 여겨진다.

단일 연결을 통한 전 양방향을 사용해서 네트워크 지연(network latency)과 체증의 불필요함을 줄이는 것.

Streaming through proxies and firewalls, with the support of upstream and downstream communication simultaneously.


Event와 Action

Server와 Client사이에서 통신을 위한 연결을 초기화 해야된다. 이러한 연결을 초기화 하기 위해서는 local이나 원격 Server를 가진 URL javascrip 객체 생성이 필수다.

1
var socket = new WebSocket(“ ws://echo.websocket.org ”);
cs


Event

Web socket API에 대한 주 Event는 아래와 같다.

Open, Message, Close, Error

각 Event는 onopen, onmessage, onclose, onerror와 같은 함수들을 실행하면서 동작된다. 또한 이런 함수들은 addEventListener라는 method에 의해 실행되는 것이다.


Open

Client와 Server 사이에서 연결이 성립되면 open event가 Web socket instance로부터 종료된다. 이를 양측간에 초기 handshake라 한다.


Message

server가 data를 보낼때 발생된다. server가 client에게 전송하는 Message는 이진 Data, plain text, image들이 포함되어있다. Data가 보내질때마다 onmessage 함수는 종료된다.


Close

통신이 끝날때 발생한다. onclose로 통신이 끝나면 message는 전송이 불가능하다. 


Error

통신중 문제가 있으면 발생한다.