1. 통신 방법
1.1. socket.io 받아오기
const SocketIO = require('socket.io');
const io = SocketIO(server, { path: '/socket.io' });
서버에서는 위와 같이 설치된 socket.io를 require하여 받아와 사용할 수 있다.
1.2. 기본적인 송신 및 수신
// 이벤트 명을 지정하고 메세지를 보낸다.
socket.emit('전송할 이벤트 명', msg)
// 해당 이벤트를 받고 콜백함수를 실행
socket.on('받을 이벤트 명', (msg) => {
})
1.2.1. socket.emit
- 소켓의 송신에 해당한다.
- 첫 번째 매개변수는 전송할 이벤트 명을 입력한다.
- 두 번째 매개변수는 수신에서 실행시킬 콜백함수를 입력한다.
1.2.2. socket.on
- 소켓의 수신에 해당한다.
- 첫 번째 매개변수는 수신할 이벤트 명을 입력한다. (송신에서 입력한 이벤트명과 같아야한다.)
- 두 번째 매개변수는 송신에서 보낸 콜백함수를 실행시킨다.
2. 네임스페이스
네임스페이스는 기본 Socket.IO 연결에서 논리적으로 분리된 통신 채널 역할을 한다. 예를 들어, /room 네임스페이스와 /chat 네임스페이스는 서로 다른 이벤트나 로직을 처리할 수 있도록 분리할 수 있다.
const room = io.of('/room'); // '/room' 네임스페이스
const chat = io.of('/chat'); // '/chat' 네임스페이스
3. Room
각 네임스페이스의 join 내에서 소켓이 사용할 수 있는 "Room"이라는 임의의 채널을 정의할 수 있다.
한마디로 해당 'Room'에 속해있는 소켓들에게 통신을 할 수 있는 것이다.
chat.on('connection', (socket) => {
socket.on('join', async (data) => {
socket.join(data);
}
}
위와 같이 구현되어있다면, Socket.IO 서버가 ’/chat’ 네임스페이스에 연결된 클라이언트 한 명이 접속할 때마다 실행된다.
그리고 클라이언트에서 socket.emit('join')을 하게 되면, 위의 socket.on('join', ...) 이 실행되게 되며, socket.join(data);로 해당 소켓이 chat에 속하게 된다.
4. boradcast
// 메시지를 전송한 클라이언트를 제외한 모든 클라이언트에게 메시지를 전송한다
socket.broadcast.emit('event_name', msg);
본인을 제외한 다른 모든 소켓들에게 통신을 보내는 기능이다.
5. private message
귓속말과 비슷한 기능이라고 생각하면 된다.
chat.to(roomId).emit('userList', { users: userColors });
to로 특정 소켓에만 송신을 할 수 있다.
위에서는 이미 chat 네임스페이스 내에서 사용하기 때문에 추가적으로 네임스페이스를 찾을 필요가 없지만, 다른 곳에서는 해당 네임스페이스의 특정 소켓에만 송신하려면 아래와 같이 해야한다.
req.of('/chat').to(roomId).emit('userList', { users: userColors });
'Node.js' 카테고리의 다른 글
Socket.io - 실전 예제 (0) | 2025.02.04 |
---|---|
Socket.io - 정의, 설치, 작동 원리, 특징 (0) | 2025.02.03 |
데이터베이스 - Mongoose (0) | 2025.01.20 |
데이터베이스 - MongoDB CRUD 작업하기 (0) | 2025.01.20 |
데이터베이스 - MongoDB 데이터베이스 및 컬렉션 생성 (0) | 2025.01.18 |