영문 위키백과에는 ...
--------------------------------------------------------------------------------------------------
Socket.IO is a JavaScript library for realtime web applications. It enables realtime, bi-directional communication between web clients and servers. It has two parts: a client-side library that runs in the browser, and a server-side library for Node.js. Both components have a nearly identical API. Like Node.js, it is event-driven.
Socket.IO primarily uses the WebSocket protocol with polling as a fallback option,[3] while providing the same interface. Although it can be used as simply a wrapper for WebSocket, it provides many more features, including broadcasting to multiple sockets, storing data associated with each client, and asynchronous I/O.
--------------------------------------------------------------------------------------------------
Socket.io는 실시간 웹 응용 프로그램을 위한 JavaScript 라이브러리이다. 웹 클라이언트와 서버 간의 실시간 양방향 통신을 가능하게 하며, 서버(Node.js)와 클라이언트(웹 어플리케이션)에서 동일한 API를 제공한다.
WebSocket 프로토콜을 주로 사용하며, WebSocket의 단순한 레퍼로 사용할 수 있지만, 여러 소켓으로 브로드 캐스팅, 각 클라이언트와 관련된 데이터 저장 및 비동기 I/O를 포함하여 더 많은 기능을 제공한다.
라고 나와있다.
간단하게 WebSocket, FlashSocket, AJAX Long Polling, AJAX Multi part Streaming, IFrame, JSONP Polling을 하나의 API로 추상화한 것이다. 개발자가 각 기술에 대해서 잘 모른다 하여도 socket.io API를 통하면, 자동으로 적합한 방법을 찾아 통신을 이뤄준다.
좀더 알아보면, 웹에서도 양방향 통신에 대한 관심이 많아지면서 AJAX가 유행하고 몇가지 양방향 통신을 위한 방법들이 생겨났는데.
Polling
- 클라이언트에서 주기적으로 요청(Request)를 보내는 방법으로 기본적으로 주기를 가지기 때문에, 즉각적인 대응은 불가능 하다.
Long Polling
- 클라이언트로 요청이 들어오면 즉시 응답이 아닌 이벤트가 발생하면 응답한다.
- 일정시간 동안 연결이 유지되며, 응답 후 연결을 끊는다.
Streaming
- 요청 후 연결을 유지하며, 이벤트 발생시 지속적으로 응답을 보낸다.
- 응답 데이터의 시작과 끝을 알 수 없기 때문에 데이터의 유효성을 체크해야 한다.
WebSocket은 이러한 상이한 방식을 뛰어넘어 실시간 양방향 통신을 가능하게 해주는데, 문제는 WebSocket이 나오기 이전 버전의 브라우저에서는 지원이 되지 않는다는 것이다. 지원하는 브라우저 버전은 http://caniuse.com/ 여기서 확인 할 수 있다.
해서 Socket.io는 WebSocket이 지원하지 않는 브라우저의 경우에는 AJAX의 방법 중 적합한 방법을 선택하여, 사용자가 신경쓰지 않아도 실시간 통신을 가능하게 해준다.
설치
npm 으로 설치할 수 있으며(npm install socket.io), 작성일 기준으로 최신 버전은 2.0.3 이다.
공식 사이트 : https://socket.io/
'Node.js' 카테고리의 다른 글
유용한 모듈 2 - winston (0) | 2017.08.07 |
---|---|
유용한 모듈 1 - moment (0) | 2017.08.03 |
Express (0) | 2017.07.27 |
echo Server-Client Test (0) | 2017.07.26 |
echo Client (0) | 2017.07.26 |