Каналы Django: Соединение принимается, загружаются начальные сообщения, но новые сообщения по каналу не отправляются

У меня есть потребительский класс Django Channels. WebSocket-соединение устанавливается без проблем, начальные сообщения также загружаются. Однако, когда я пытаюсь отправить сообщение, не срабатывает метод async_to_sync и функция chat_message. Я пытался сделать это несколько раз. Оператор print внутри функции chat_message не работает, и хотя я пробовал отлавливать исключения, ошибок также не возникает.

Я проверил канальный слой и Redis через оболочку, и они работают нормально. Новые сообщения создаются в бэкенде, уведомления принимаются, но на клиентскую часть сообщения не отправляются.

class ChatConsumer(WebsocketConsumer):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.user = None
        self.room_group_name = None
        self.room_code = None

    def connect(self):
        self.room_code          = self.scope['url_route']['kwargs']['room_code']
        self.room_group_name    = f'chat_{self.room_code}'
        self.room = get_object_or_404(ChatRoom, room_code=self.room_code)

        try:
            try:
                self.user = self.scope['user']
            except Exception as e:
                self.user = None

            if self.user == None:
                self.close()
                return

            # Join room group
            self.channel_layer.group_add(
                self.room_group_name,
                self.channel_name
            )

            self.accept()

            self.load_initial_messages()

        except Exception as e:
            print(str(e))
            self.close()
    
    def disconnect(self, code):
    
        async_to_sync(self.channel_layer.group_discard)(
            self.room_group_name,
            self.channel_name
        )


    def receive(self, text_data=None):
        text_data_json  = json.loads(text_data)
        message         = text_data_json['message']
    
        msg     = Message.objects.create(room=self.room, user=self.user.username, message=message,)

        message_data = {
                'roomCode': self.room_code, 
                'user': msg.user, 
                'message': msg.message, 
        }

        try:
            async_to_sync(self.channel_layer.group_send)(
                self.room_group_name, {"type": "chat.message", 'message': message_data}
            )
            print("Message sent to group") # this is getting printed
        except Exception as e:
            print(f"Error in group_send: {str(e)}")
    

        self.send_notifications(message=message) 



    def chat_message(self, event):
        message = event['message']
        print(message) # not getting printed
        self.send(text_data=json.dumps({
            'roomCode': message['roomCode'],
            'user': message['user'],
                        'message: message['message']

        }))

Может ли кто-нибудь помочь решить эту проблему?

Заранее спасибо

Я проверил канальный слой и Redis через оболочку, и они работают нормально. Новые сообщения создаются в бэкенде, уведомления принимаются, но на клиентскую часть сообщения не отправляются.

На самом деле в последней строке вашего

отсутствует кавычка.

chat_message функция.

Ваш код :

def chat_message(self, event):
    message = event['message']
    print(message) # not getting printed
    self.send(text_data=json.dumps({
        'roomCode': message['roomCode'],
        'user': message['user'],
                    'message: message['message'] #here is typo

    }))

Правильный код:

def chat_message(self, event):
    message = event['message']
    print(message) # not getting printed
    self.send(text_data=json.dumps({
        'roomCode': message['roomCode'],
        'user': message['user'],
        'message': message['message']  #typo removed

    }))
Вернуться на верх