최종프로젝트에서 실시간 채팅기능을 담당하게 되어 socket.io를 사용하여 1대1채팅을 구현하고자 하였다.
처음 A유저에게 채팅을 보낼 때는 문제없지만 A유저에게 보낸 다음 다른 B유저에게 채팅을 보내면 A유저와 B유저에게 메세지가 전송이 된다.
console.log로 socket.room을 출력해 본 결과 join된 roomID가 A유저의 socket이 join된 roomID와 B유저가 join된 roomID가 나왔다.
socket은 여러개의 room에 join할 수 있어 첫번째 A유저의 roomID와 두번째 B유저의 roomID를 둘다 join하고 있던게 원인이었다.
// chat ID로 join하기
@SubscribeMessage('join')
joinChatRoom(
@ConnectedSocket() socket: Socket,
@MessageBody() roomId: string,
): void {
socket.join(roomId);
}
// 방나가기
@SubscribeMessage('leave')
leaveRoom(@ConnectedSocket() socket: Socket, @MessageBody() roomId: string) {
// 이미 접속한 방인지 확인
if (socket.rooms) {
socket.leave(roomId);
}
}