티스토리 뷰

개발 언어/NodeJS

NodeJS - Socket IO

jin-park 2020. 2. 28. 16:59

웹소켓 이전 요청 방식

웹소켓이 나오기전에 전형적인 웹 요청 방식은 client -> server로의 단방향 요청이다.

이전에는 이러한 방식이 문제가 되지 않았으나 점차 웹서비스와 기술이 다양해지면서 server -> client측으로 데이터를 전송할 수 있는 방법이 필요해졌다.

허나, http 통신 특성상 한번 통신을 하면 연결이 끊기기때문에 서버에서 데이터를 먼저 보낼수 있는 방법은 존재하지 않아 Polling, Long Polling, Streaming 와 같은 방식들 사용하여 비슷한 효과를 낼 수 있었다.

WebSocket

사용자와 서버 사이의 양방향 연결 채널을 구성하는 HTML5 프로토콜이다.

WebSocket API를 통해 서버로 메시지를 보내고 요청 없이 응답을 받아오는 것이 가능하다.

그러나 WebSocket의 경우 브라우저 종류 및 버전에 따라 지원하지 않을 수도 있다는 단점이 있다.

Socket IO

socket.io는 통신을 시작할 때, 각 브라우저에 대해서 websocket, pooling, streaming, flash socket 등에서 가장 적절한 방법을 찾아 메시지를 보내준다.

socket.io를 통해 개발을 하면 WebSocket이 지원이 되지 않는 브라우저에서도 메시지를 양방향으로 주고 받을 수 있다.

namespace

서로 다른 경로를 할당하는 의미로 socket에 namespace를 지정할 수 있다.

namespace를 특별히 지정하지 않은 경우 default namespace인 /를 사용하게 된다.

(학교로 치면 서로 다른 학교를 의미한다.)

Room

namespace 내에서 임의의 채널을 지정할 수 있다.

이를 room이라 하며 이를 통해 room에 join되어 있는 클라이언트 만의 데이터 송수신이 가능하게 된다.

(학교로 치면 각 반을 의미한다.)

https://medium.com/wasd/node-js%EC%99%80-socket-io%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%B1%84%ED%8C%85-%EA%B5%AC%ED%98%84-2-ce5ac35bb007

메시지 수신 - on

클라이언트 및 서버로부터 메시지를 수신받으려면 on을 사용한다.

// socket.on(이벤트명, 핸들러 함수)
socket.on('event_name', function(data) {
  console.log('Message from Client: ' + data);
});

메시지 발신 - emit

클라이언트 및 서버로 메시지를 발신하려면 emit을 사용한다.
(socket io emit cheat sheet - https://socket.io/docs/emit-cheatsheet/)

// io.emit(이벤트 명, 전송 데이터)

// 접속된 모든 클라이언트에게 메시지를 전송한다
io.emit('event_name', msg);

// 메시지를 전송한 클라이언트에게만 메시지를 전송한다
socket.emit('event_name', msg);

// 메시지를 전송한 클라이언트를 제외한 모든 클라이언트에게 메시지를 전송한다
socket.broadcast.emit('event_name', msg);

// 특정 클라이언트에게만 메시지를 전송한다
io.to(id).emit('event_name', data);

 


출처

https://d2.naver.com/helloworld/1336

https://poiemaweb.com/nodejs-socketio#6-room

 

Node.js(Express)와 Socket.io | PoiemaWeb

WebSocket, Socket.io를 사용한 실시간 채팅 애플리케이션

poiemaweb.com

 

'개발 언어 > NodeJS' 카테고리의 다른 글

Deno  (0) 2020.06.15
NodeJS - WebRTC  (0) 2020.02.28
비동기 프로그래밍  (0) 2020.01.11
자바스크립트 - 프로토타입 상속  (0) 2019.12.03
자바스크립트 - ES6문법  (0) 2019.07.27
댓글