websocket을 이용한 채팅서버개발 고생기(1)
1편에 이어 .. 마저 작성
.
상대방 읽음처리가 가장 어려운 난제중에 하나였다.
이 부분에서 정말 많이 헤맸는데 우선 헤맸던 포인트가 있다.
- 앱이라면 괜찮지만 웹은 유저가 이 방에서 나가도 프론트에서 정확하게 트래킹이 어려웠다.
- 그렇다보니 해당 채팅방에서 나가서 다른 채팅방에 갔는데, socket을 쏘니 방 a의 채팅에 방 b에서의 채팅이 가기시작하고, 혹은 a를 읽었는데 b방의 채팅을 읽음이 전송되었다.
이러한 이슈들로 인해 앞선 고생기(1)에서의 2번(전면 구조변경) 을 채택하고,
socket의 room에 저장하는 방식들을 전면 수정을 했다.
- 상대방이 A방에 채팅을 보낸다. 그러면 A방의 다른유저에게 new채팅에 대한 socket을 보내게 된다.
- A방에 내가 있다면(채팅창에 활성화 상태라면) 이때 내가 해당 채팅방에서 읽었음에 대한 정보를 서버로 보내게끔 했다.
- 이렇게 "나 읽음" 이라는 socket을 수신받는다면 서버에서는 내가 아닌 상대방이 보낸 메세지를 모두 읽음처리하고, A방에 읽음처리가 완료되었음을 내가아닌 다른사람에게보내, 상대방이 내 채팅을 읽었음을 알 수 있게 한다.
- 내가 해당 파티채팅을 리로딩할때도 마찬가지로 읽음처리 루틴을 실행시킨다.
이 외에도,
최대한 서로 다른방의 간섭을 막아주기 위해, 채팅방에서 나와 목록으로 들어갈때 모든 방에서 leave를 했고, 새로운 채팅방에 접속할때 또한 그 방을 제외한 나머지 방에서 leave하도록 하는 등의 다양한 방법을 써서 구현을 했다.