Socket.io
- 클라이언트와 서버 간의 짧은 지연 시간, 양방향 및 이벤트 기반 통신을 실시간으로 가능하게 하는 라이브러리
- WebSocket 프로토콜 위에서 구축됨
- 통신 과정을 단순화하고 개선하기 위한 추가 기능 제공
- 이벤트 기반
- 자동 재연결
기본 이벤트
- connection
- 클라이언트가 서버에 연결되었을 때 발생
- 클라이언트와의 상호작용을 초기화하거나 초기 데이터 전달 가능
- disconnect : 클라이언트가 연결을 해제했을 때 발생
- disconnecting : 클라이언트가 연결을 해제하려는 경우에 발생
- error : 연결 중에 오류가 나타났을 때 발생
사용자 지정 이벤트
- 콜백 함수는 생략 가능
- 인자는 마음대로 추가할 수 있음 (클라이언트 인자 개수와 서버에서 받는 인자 개수 맞춰주기)
- 보낼 때는 emit, 받을 때는 on
socket.emit("hello", "world", (response) => {
console.log(response);
});
socket.on("hello", (arg, callback) => {
console.log(arg);
callback("got it");
});
룸 관련 함수
socket.join("room 237");
socket.leave("roomA");
io.to("roomA").emit("message", "Hello, Room A!");
socket.broadcast.to("roomA").emit("message", "새로운 참가자가 참여했습니다.");
const roomInfo = io.sockets.adapter.rooms["roomA"];
console.log(roomInfo);
Socket.io 불러오기 (server)
npm i socket.io
const http = require("http");
const express = require("express");
const SocketIO = require("socket.io");
const app = express();
const PORT = 8000;
const server = http.createServer(app);
const io = SocketIO(server);
server.listen(PORT, () => {
console.log(`http://localhost:${PORT}`);
});
Socket.io 불러오기 (client)
- localhost:8000/socket.io/socket.io.js
- 서버가 연결되면, 브라우저를 통해 socket.io 파일에 접근 가능
<script src="/socket.io/socket.io.js"></script>
const socket = io();
- io( )는 클라이언트 소켓을 생성하고, 서버와의 연결을 설정