inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

django channels 채팅 기능을 비동기 구현 시, 채팅방 종료 관련 문의입니다.

230

작성자 없음

작성한 질문수 0

0

consumers.py

from django.contrib.auth.models import User
from django.shortcuts import get_object_or_404

from channels.db import database_sync_to_async
from channels.generic.websocket import AsyncJsonWebsocketConsumer

from chat.models import Chat, Room


class ChatConsumer(AsyncJsonWebsocketConsumer):
    def __init__(self):
        super().__init__()
        self.group_name = ""
        self.room = None

    # .. 생략 ..

    async def chat_room_delete(self, message_dict):
        print(message_dict, "chat_room_delete")
        custom_code = 4000
        await self.close(code=custom_code)

    # .. 생략 ..

 

채팅방 삭제 요청 시, 실제 데이터를 삭제하는 것이 아니라 채팅방의 상태를 비활성화하도록 is_active=False로 변경처리하게 로직을 작성해놨습니다.

그래서 아래와 같이 signal을 작성하였는데요.

@receiver(post_save, sender=Room)
def room_on_post_save(sender, instance, **kwargs):
    if instance.is_active:
        return 
    print("동작여부 확인")
    channel_layer = get_channel_layer()
    print(channel_layer.__dict__)
    channel_layer.group_send(
        instance.chat_group_name,
        {
            "type": "chat.room.deleted",
        },
    )

 

삭제 시, 해당 함수가 실행되긴 하지만 group_send가 되지 않는지 다른 유저의 브라우저 콘솔창을 보면 방 삭제 관련 메세지가 뜨지를 않습니다.

어디가 잘못되었는지, 어느 부분을 수정해야 하는지 알고 싶습니다.

 

 

 

django-channels 채팅방종료

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.
문제의 코드를 보면 채팅방 삭제 요청 시, 데이터를 실제로 삭제하지 않고 상태를 비활성화하는 것으로 처리되도록 작성되어 있습니다. 그리고 채팅방의 상태가 변경되면 post_save 신호를 받아 채팅방이 삭제되었다는 메시지를 채팅 그룹에 전송하는 것 같습니다.

그러나, 코드 일부가 생략되어 있어서 문제의 코드에 대한 자세한 이해가 어려워집니다. 또한, 어떤 문제가 발생하는지에 대한 구체적인 설명이 없어서 도움을 드리기 어렵습니다. 어떤 문제가 발생하는지 자세한 정보를 제공해 주시면 더 정확한 답변을 드릴 수 있을 것 같아요.

유저목록 확인 문제 질문드립니다.

0

164

2

안녕하세요 선생님,

0

91

1

하나의 채팅방만 만들어보려고 하는데 잘 안되고 있습니다.

0

103

1

도커와 연동 관련 질문드립니다.

0

205

3

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

0

165

2

안녕하세요, onopen() 문제로 질문드립니다.

0

137

2

Consumer Instances 관련 질문 있습니다.

0

72

2

안녕하세요, 요청은 채널스에서 먼저 받고, http 요청은 장고를 통해서 처리한다고 하셨는데요.

0

79

2

기능 구현 질문 드립니다.

0

115

1

git에 있는 코드를 다운 받아 실행 해봤는데 에러가 났습니다.

0

153

2

ValueError: No route found for path 'ws/liveblog/'.

0

134

2

지정 경로에 템플릿 파일 만드는 단축키가 뭔가요?

0

121

2

채팅 내역을 영구적으로 저장하고 싶습니다.

0

89

1

질문이 있습니다.

0

164

1

구독 채팅 구현

0

213

1

5장에서 ASGI로 구동하기 중 daphne 적용 안됨

0

523

4

헷갈려서 질문드립니다.

0

356

2

명령행에서 음성으로 메세지 읽어주기 pygame 오류

0

254

1

OpenAI API 활용목적 실습 진행하는데 오류가나요

0

413

2

@login_required 장식자를 적용한후에는 로그인을 성공하면 채팅방으로 어떻게 이동을 하는 건가요?

1

276

1

docker run -d --restart always --name redis7 --publish 6379:6379 redis:7

0

261

1

웹소켓 통신과 비동기처리 개념에 관해 질문 드립니다~

0

1166

1

브라우저에서 지원하는 Voices의 종류

0

354

1

websocket 자바스크립트 클라이언트 구현?

0

361

1