About Socket.IO(In progress...)

Doveloper·2022년 7월 3일
0

Back-end

목록 보기
3/6
post-thumbnail

About Socketio

Websocket, EngineIO based socket API, Library.

  • Node.js server의 API
  • Javascript client library, API

Socket.IO vs Websocket
enables real-time, bidirectional and evnet-based communication.

  • Real-time analytics
  • Instant messaging and chat
  • Binary Streaming
  • Document Collaboration

Socket.IO Features

  • Reliability
    - proxies, load balancers, personal firewall, antivirus sw를 자체적 구성 가능(EngineIO를 사용)
    - EngineIO는 Just Valina JS. (No API, etc)
  • Auto-reconnection support
    - Websocket과 다르게 SocketIO는 disconnect시 자체적으로 re-connect를 시도.
  • Disconnection dectection
    - Heartbeat mechanism을 적용한 EngineIO level에서 disconnect 감지.
  • Binary support (Blob, Buffer)
  • Multiplexing support
    - 1 client가 1 socket을 열어서 connect 시도, 그러나 각각 다른 room에 접근을 원할 때, Socketio는 Multiplexing을 지원. (예시로, 전화선을 생각해보면, 하나의 휴대폰에 많은 전화가 들어오는데 그 전화 각각의 전화선이 따로 필요한 것이 아님. 하나의 전화선으로 많은 전화의 유입을 처리.)
  • Room support
    - Multiplexing과 같은 맥락. 한번에 여러 Room에 접근이 가능함. (각기 다른 Namespace의 각 channel들을 Room이라고 부름.)

기본적으로 server와 client의 API가 각각 존재하고 Client, Server의 socket 오브젝트는 비슷하게 동작. method로는 emit과 on 을 사용하여 메시지를 방출, listen한다. On 메서드는 특히 JS의 EventListener처럼 메서드 정의(사용)과 관계없이 일어나는 이벤트에 대해 listen하고 반응하는 형태이다.

Ping, pong 메서드를 통해 25second 마다 Server는 Client의 연결을 확인한다. (25초마다 Ping, 5초 안에 Pong을 받지 못하면 Disconnect로 간주.)

가장 중요한 포인트는, SocketIO는 HTTP를 사용하는 AJAX Call 과는 다르게 TCP를 이용하여 계속해서 연결을 유지한 상태로 실시간 Data를 주고 받는다는 점.
HTTP의 AJAX보다 Overhead가 훨씬 작고 한번 Tunnel을 뚫어 놓은 상태라 연결이 끊기지만 않는다면 지속적인 Data교환이 가능.

Socket & File Descriptor

Linux 에서 기본적으로 socket은 파일과 동일하게 취급. File Descriptor가 관리하게 된다.

File Descriptor?

운영체제가 만든 파일 또는 소켓을 지칭하기 위해 숫자를 부여하고 관리.
다음의 파일 정보를 포함하고 있음. (FCB-File Control Block)

  1. File name
  2. HDD(SSD)에서의 File 위치
  3. File structure (순차 파일, 직접 파일 등..)
  4. Access Control 정보, Access 횟수
  5. 생성 및 제거 날짜 시간, 최종 수정 날짜 시간
profile
Hungry Developer

0개의 댓글