해결된 질문
작성
·
603
0
안녕하세요.
채팅방에서 유저가 퇴장했을때 퇴장 했다는 메시지가 보여지질 않습니다. 그래서 disconnect, chat_user_leave method
에 print
를 추가해서 확인을 해보니 disconnect method
에서 is_last_leave
는 True
가 찍혀 채널 레이어 그룹에 type=‘chat.user.leave’
메시지를 보내는 것은 되는거 같은데, 그 후 chat_user_leave method
가 실행이 안되는거 같습니다. (추가한 print
가 실행이 안되서 터미널에 아무것도 찍히지 않습니다.)
이 부분이 원인거 같은데 무슨 문제인지 어떻게 해결해야될지 모르겠어서 질문드립니다.
답변 3
0
https://drive.google.com/file/d/1303fPtHJQPq3wiKJm0Uv_xJjyIP3TVmf/view?usp=sharing
링크 공유드립니다.
영상 찍고 여러번 테스트를 해봤고 대부분은 chat_user_leave method
가 실행이 안되는데 가끔씩 정상적으로 chat.user.leave
메세지를 받는 경우도 확인을 했습니다.
그래서 코드는 문제가 없는거 같은데 혹시 redis를 https://app.redislabs.com/에서 사용중인데 도커나 다른걸로 redis를 설치해서 테스트 해봐야하는지 궁금합니다.
redislabs 서버에는 초기 접속이 느릴 뿐, 메세지가 누락되는 경우는 없을 듯 한데요.
로컬에 redis 를 설치하셔서도 한 번 테스트는 필요해보입니다.
지금의 프로젝트 코드를 공유해주시면, 저도 해창님 코드로 테스트를 해보겠습니다.
redislabs가 설정된 .env 파일도 같이 공유해주시면, 저도 확인이 용이할 듯 하니.
me@askcompany.kr 로 프로젝트 폴더를 압축해서 보내주시겠어요?
0
안녕하세요.
보여주신 코드는 강의에서 다룬 코드와 동일해보입니다.
https://github.com/pyhub-kr/course-django-channels-basic/blob/main/chat/consumers.py
코드는 동일한데 동작이 다르다면, 테스트 방법이 다를 듯 합니다.
2개의 uesrname으로 2개의 브라우저 창에서 각각 로그인하시고
창#1에는 유저#1이, 창#2에는 유저#2가 있다고 할 때
유저#1이 새로운 채팅방을 만들어서 들어갔고, 유저#2가 같은 채팅방에 들어갔고
유저#2가 그 채팅방에서 나오면, 유저#2 측의 Consumer에서 disconnect 이벤트가 발생할 것이구요. disconnect 메서드에서 유저#2는 채팅방 그룹에서 discard합니다. 그리고 채팅방 그룹에 chat.user.leave 메세지를 보냅니다.
유저#2는 이미 채팅방 그룹에서 discard되었기 때문에 chat.user.leave 메세지를 받을 수 없구요. 유저#1의 Consumer Instance에서는 chat.user.leave 메세지를 받을 수 있습니다.
위 순서대로 차근차근 확인해보겠어요?
확인해보시고, 댓글 부탁드립니다.
화이팅입니다. :-)
위의 순서대로 다시 테스트를 해봤지만 여전히 chat_user_leave method
는 실행이 안되는거 같습니다.
혹시 오타가 있나 싶어서 github의 코드 복붙해서 해봤지만 결과는 같아서 코드 문제는 아닌거 같은데... 여전히 문제가 뭔지 모르겠네요...
그런데 이걸 vs code debug로 disconnect의 async_to_sync(self.channel_layer.group_send)(...)
에 중단점 찍고 한줄씩 계속 실행해보면 마지막에 chat_user_leave method
에 추가한 print
가 찍혀서 실행이 되는걸로 확인이 됩니다.
‘redis<4.4.0’으로 버전 낮춰서 실해하니 정상 작동합니다!
처음에 redis 설치할때는 4.4.0 미만으로 설치를 했던거 같은데…이 부분은 제대로 확인 못해봤네요.
코드도 문제 없는데 이것만 계속 안되서 신경쓰였는데 해결이 되었네요.
신경써주셔서 감사합니다~!