Каналы 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
}))