인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

임찬님의 프로필 이미지

작성한 질문수

파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편

채팅방 참여자 목록 노출

채팅방 참여자 목록 - 채팅방 입장/퇴장 실시간 이벤트 처리

작성

·

55

·

수정됨

0

 해당 기능을 구현까지 완료했고, 결과는 도출합니다.

궁금한 점이 사용자가 채팅방을 나간 후 퇴장 처리 메세지가 창에 나타날 때 Delay? 나간 후 한참 시간이 지난 후에 나타나는데, 자연스러운 상황인지 아니면 제가 잘못한 건지 판단이 되지 않습니다..

답변 2

0

이진석님의 프로필 이미지
이진석
지식공유자

보내주신 메일 잘 확인했습니다. 보내주신 프로젝트를 제가 직접 돌려보니 delay없이 잘 동작하네요. 흠. (로컬 redis)

일단 제가 확인하기로는 Delay는 없었는 데요. 혹시 유저가 단일 탭을 열어두고 채팅방에 들어왔다가 나가도 동일하게 Delay가 발생하나요?

그리고, 혹시 redis는 어디 서버를 쓰고 계시나요? 로컬 redis가 아니시라면 로컬에서도 redis를 구동해서 테스트해보시겠어요?

각 이벤트의 발생여부를 확인하는 가장 확실한 방법은 로그를 출력해보는 것입니다. 아래 gist 페이지에 로그 남기는 방법을 설명해뒀으니 참고하시어 로그를 한 번 찍어보시고, 각 이벤트들이 정상 동작하는 지 확인해보시겠어요?

https://gist.github.com/allieus/275a4b382ea0bb3a7e470dd2b2c75a9e

살펴보시고 댓글 부탁드립니다. :-)

임찬님의 프로필 이미지
임찬
질문자

안녕하세요.
저의 환경은 서버 컴퓨터에 Ubuntu 가상머신을 띄우고 진행중입니다.

Redis에 경우, Docker를 통해 로컬에서 실행하고 있습니다.

일단, 코드 자체에 문제는 아닌 것에 안도합니다.
---

gist 작업을 진행하고 로그를 확인하니, gist와 동일하게 나타나는데, 해당 로그가 방을 나가자마자가 아니라 한 1~2분 늦게 반응하네요.

그리고 실시간 유저도 1~2분 늦게 없어지고요 ㅎㅎ

image.png

 

image.png



아마 저의 환경이 타 환경보다 특수한? 상황이라 그런 것 같기도 합니다.

서버 컴퓨터 위에 가상머신을 띄우고 진행하는지라... 딜레이가 있을 수도 있겠네요 지금 생각해보니...

 

이진석님의 프로필 이미지
이진석
지식공유자

WebSocket DISCONNECT 로그부터 늦게 뜨시는 거죠?

서버 머신에서 가상 머신을 통해 개발서버를 구동 중이시군요. 그래도 Delay가 수 분 단위로 발생하는 것은 뭔가 이상하네요.

네트워크 이슈같기는 한데요. 혹시 회사 네트워크에 계신다면, 클라이언트와 개발서버 간에 어떤 네트워크 장비가, 연결을 일정 시간동안 유지하는 것은 아닐까요.

이러한 경우 disconnect 이벤트 뿐만 아니라, 별도로 웹소켓 클라이언트 단에서 일정 주기로 ping 메시지를 보내고, 웹소켓 서버 단에서는 일정 주기로 ping 메시지가 없으면 연결이 끊어진 것으로 간주하고, 서버 단에서 강제로 연결을 끊는 접근을 해볼 수도 있겠습니다.

임찬님의 프로필 이미지
임찬
질문자

네, 회사에서 진행하고 있어서 발생할 수 있다고 생각합니다.

나중에 개인 머신으로 해보고 이야기드리겠습니다!!
그래도 강사님이 코드를 실행했을 때 문제가 없었으니, 제가 작성하는 코드가 문제가 없다는 것을 알아서 다행입니다.

언제나 감사드립니다.

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

유저는 브라우저 여러 창/탭을 통해 다수의 웹소켓 연결을 가질 수 있구요.
특정 채팅방에서 해당 유저의 마지막 disconnect 시에 퇴장 처리 메시지를 보여주도록 했습니다.
한참 시간이 지난 후에 보여진다면, 웹소켓 연결이 남아있는 것은 아닐지 의심이 됩니다.

웹소켓의 disconnect 이벤트는 유저와의 웹소켓 연결이 끊어진 직후에 즉시 발생합니다.
redis 단에서도 지연은 발생하지 않습니다.

왜 delay가 발생하는 것인지 의문이네요. delay로 판단하신 상황에 대한 보다 자세한 설명과, 지금 구동하신 환경과 프로젝트 코드를 help@pyhub.kr 메일로 첨부로 보내주시면, 저도 동작을 한 번 더 확인해보겠습니다.

화이팅입니다! :-)

임찬님의 프로필 이미지
임찬
질문자

웹소켓이 늦게 Disconnect 되는 것으로 상황파악이 되었습니다.

admin 페이지를 보면서 확인하니, Room member 객체가 생성 및 삭제될 때 즉각즉각 반응을 하지 않는 것으로 보입니다.

 

일단 조금 더 파악해보고, 정 안되겠다 싶으면 메일로 첨부드리겠습니다.

 

언제나 감사드립니다.

임찬님의 프로필 이미지

작성한 질문수

질문하기