Socket.io
- 웹소켓에 기반하여 서버와 브라우저 간의 양방향 통신을 돕는 JavaScript 라이브러리
- 하나의 소켓 연결은 하나의 namespace를 가지며, 하나의 namespace 안에는 여러 개의 room을 생성할 수 있음
- 하나의 room 안에 특정 클라이언트들을 입장시키거나(join) 퇴장시킬(leave) 수 있음
기본 세팅
const express = require("express");
const app = express();
const http = require("http");
const { Server } = require("socket.io");
const server = http.createServer(app);
const io = new Server(server, {
cors: {
origin: "*", // 접근을 허용할 클라이언트 주소
methods: ["GET", "POST"], // 허용할 methods 종류
},
});
// 소켓 연결
io.on('connection', (socket) => {
// 소켓 연결 종료
socket.on('disconnect', () => {
console.log('클라이언트 접속 해제', socket.id); // socket.id
});
// 클라이언트로부터 메시지 수신
// reply라는 이벤트로 송신오면 클라이언트에서 보낸 JSON 객체가 data 인수에 담김
socket.on('reply', (data) => {
console.log(data);
});
// 클라이언트로 메세지 송신(전체)
socket.emit('news', 'Hello Socket.IO'); // news라는 이벤트로 문자열을 포함하여 송신
// 특정 클라이언트로 메세지 송신
socket.to("방 번호").emit('news', 'Hello Socket.IO'); // news라는 이벤트로 문자열을 포함하여 송신
});
동작 원리
- io.on("connection", (socket) => {}) = 소켓 연결
- socket.on("이벤트명", (data) => {}) = 클라이언트에서 지정한 보낸 이벤트를 받고 콜백함수를 실행 (파라미터로 입력하는 이벤트명이 클라이언트가 설정한 이벤트명과 일치해야 함)
- socket.emit("이벤트명", room) = 서버에서 클라이언트로 이벤트를 지정한 데이터와 함께 전달
- io.to() = 특정 클라이언트 지정
- socket.to() = 특정 room 지정
- socket.join(방 번호) = 지정한 room에 입장
- socket.leave(방 번호) = 지정한 room에서 퇴장
웹소켓(ws)와의 차이점
Socket.io
- JavaScript 라이브러리
- room이 존재
- 모든 타입의 데이터 전송 가능
ws
- 프로토콜
- room이 존재하지 X
- string 데이터만 전송 가능
- url 설정 시 => ws://로 시작
'Node.js' 카테고리의 다른 글
Node.js 클러스터 (0) | 2023.08.28 |
---|---|
Node.js 정의 및 장단점 (0) | 2023.06.06 |
Node.js Swagger 적용 (0) | 2023.06.03 |
Nodemon/PM2 (0) | 2023.05.30 |
Winston (Node.js 로그 관리) (0) | 2023.05.26 |
댓글