🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

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

23.10.14 11:32 작성 23.10.14 11:33 수정 조회수 137

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가 되지 않는지 다른 유저의 브라우저 콘솔창을 보면 방 삭제 관련 메세지가 뜨지를 않습니다.

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

 

 

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.10.15

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

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

채널톡 아이콘