티스토리 뷰
웹소켓 이전 요청 방식
웹소켓이 나오기전에 전형적인 웹 요청 방식은 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되어 있는 클라이언트 만의 데이터 송수신이 가능하게 된다.
(학교로 치면 각 반을 의미한다.)
메시지 수신 - 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
'개발 언어 > 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 |