1)Socket: 소켓은 클라이언트와 서버 간의 연결을 나타냅니다. 소켓을 사용하여 실시간으로 데이터를 보내고 받을 수 있습니다.
2)Server: 서버는 클라이언트와의 소켓 연결을 설정하고 관리합니다. 서버는 클라이언트로 이벤트를 방출하거나 클라이언트로부터 이벤트를 수신 할 수 있습니다.
3)Client: 클라이언트는 서버와의 소켓 연결을 설정하고 관리합니다. 클라이언트는 서버와 동일하게, 서버로 이벤트를 방출하거나 서버에서 이벤트를 수신 할 수 있습니다.
⭐️ Socket.IO 트래픽 격리 구분
1)Event: 이벤트는 소켓 연결을 통해 클라이언트와 서버간에 전송 된 메시지입니다. 이벤트 이름은 서버와 클라이언트에서 동일하게 선언하여야 합니다. (JSON, 문자열, 이진 등 모든 형식의 데이터 포함 가능)
2)Namespace: 네임 스페이스는 클라이언트와 서버 간의 별도의 통신 채널입니다. 단일 서버에서 여러 네임 스페이스를 작성할 수 있으며 클라이언트는 특정 네임 스페이스에 연결하여 해당 네임 스페이스의 다른 클라이언트에게만 이벤트를 수신하거나 방출 할 수 있습니다.
3)Room: 룸은 함께 결합 된 소켓 그룹입니다. 소켓은 여러 룸에 합류하거나 떠날 수 있습니다. 룸은 연결된 모든 고객에게 방송하는 대신 특정 클라이언트 그룹에 메시지를 보내는 데 유용합니다.
⭐️ Socket.IO 이벤트 송수신 방식
1)Public: Public은 연결된 모든 클라이언트에게 메시지가 전송되는 경우입니다. Socket.IO에서 io.emit 연결된 모든 클라이언트에게 메시지를 브로드 캐스트하는 방법으로, 채팅 메시지와 같은 일반 메시지를 연결된 모든 클라이언트에게 보내는 데 유용합니다.
// 서버 측 io.on('connection', (socket) => { socket.on('chat message', (msg) => { io.emit('chat message', msg); // 연결된 모든 클라이언트에게 메시지 통신(브로드 캐스트) }); }); // 클라이언트 측 socket.on('chat message', (msg) => { console.log(`Received message: ${msg}`); });
2)Private: Private은 특정 고객에게 메시지를 보낼 때입니다. Socket.IO에서 socket.emit 특정 클라이언트에게 메시지를 보내는 방법으로, 알림 또는 알림과 같은 개인 메시지를 특정 클라이언트로 보내는 데 유용합니다.
// 서버 측 io.on('connection', (socket) => { socket.on('send notification', (msg, recipientId) => { io.to(recipientId).emit('notification', msg); // 지정된 수신자에게 메시지 보내기 }); }); // 클라이언트 측 socket.on('notification', (msg) => { console.log(`Received notification: ${msg}`); });
3)Broadcasting: Broadcasting은 발신자를 제외한 모든 클라이언트에게 메시지가 전송되는 경우입니다. Socket.IO에서 socket.broadcast.emit 발신자를 제외한 모든 연결된 클라이언트에게 메시지를 브로드 캐스트하는 방법으로, 발신자를 제외한 모든 연결된 클라이언트에 사용자 조인 또는 종료와 같은 알림을 보내는 데 유용합니다.
// 서버 측 io.on('connection', (socket) => { socket.on('user join', (username) => { socket.broadcast.emit('new user', username); // 발신자를 제외한 연결된 모든 클라이언트에게 메시지 통신(브로드 캐스트) }); }); // 클라이언트 측 socket.on('new user', (username) => { console.log(`New user joined: ${username}`); });