한 채팅방에서 여러 메시지를 수신하는 건 Socket.io 연결을 끊지 않아서
이 문제였다. 이거였다. 나는 채팅 페이지에 입장하면 io.connect 를 진행했다. 그런데 문제는 로그아웃을 했을 때, 이 connect 가 끝나지 않는 문제였다. 로그아웃을 했음에도 이 id 가 여전히 남아 있다. 그렇기에 새롭게 로그인을 하고 채팅 페이지에 들어가면 저렇게 socket 아이디가 계속 누적돼서 생성되는 것이다. 만약, 유저가 위에서처럼 room 2번 방에 입장한다고 했을 때, 처음 채팅 페이지에 들어갔을 때의 소켓 아이디도 해당 방에 들어가 있고, 로그아웃을 하고 다시 로그인 한 다음에 입장을 하면 그 때 새롭게 만들어진 소켓 아이디로 입장을 하니 계속해서 누적되는 것이다.
이것을 해결해주기 위해 로그인이 돼 있는가, 안 돼 있는가를 구분하는 상태를 생성하고 만약에 로그아웃이 됐다면 저 룸에서 나가도록 설정을 해주었다. 이렇게 해주니 로그아웃을 하고 다시 재입장 하더라도 다수의 문자가 오는 현상을 막을 수 있었다
A와의 채팅방을 보고 있는데 B가 보낸 메시지를 수신하는 건 Room을 제대로 나가지 않아서
나는 처음에 채팅 페이지에 들어오면 이 유저가 속해있는 모든 room 에 Join 을 해서 실시간 연락이 되도록 설정을 해두었다. 그런데 이렇게 하니까 다른 사람이 보낸 채팅을 그대로 받는 문제를 발견했다. 그래서 처음에 모든 방에 입장하는 로직을 지웠다. 그리고 만약에 방을 이동한다면, 그 이동하는 방에는 join을 하고 이전 방은 leave 하는 방식으로 로직을 바꾸었다. 이렇게 하니 이제 더이상 다른 채팅방의 상대방이 보낸 문자를 받지 않아도 됐다.
'코드스테이츠 > 코드스테이츠 @ 팀 프로젝트' 카테고리의 다른 글
[코드 스테이츠 / Final-Project] 146일차, "이전의 에러 해결은 잘못된 방법이었다" (0) | 2021.12.12 |
---|---|
[코드 스테이츠 / Final-Project] 145일차, "라우팅 되면 완전히 연결 끊어버리기" (0) | 2021.12.11 |
[코드 스테이츠 / Final-Project] 143일차, "데이터 베이스에서의 말썽" (0) | 2021.12.09 |
[코드 스테이츠 / Final-Project] 142일차, "Socket.io 와 상태의 환상의 에러네이션" (0) | 2021.12.08 |
[코드 스테이츠 / Final-Project] 141일차, "S3 에 왜 이미지 DELETE가 안 되지..?" (0) | 2021.12.07 |