Отправка сообщения определенной группе в Django Channels
Я хотел бы подключить каждого пользователя, посетившего определенную страницу. Назовем ее "Зал ожидания" и подключим к вебсокету.
Когда пользователь подключается к вебсокету, он подписывается на группу. Группа называется по имени пользователя (user_id). Таким образом, User1 и User подключаются к вебсокету и подписываются на группы; 1 и 2 соответственно.
После подключения пользователя я запускаю метод, который отправляет user_id, с которым пользователь был сопоставлен, и room_id на мой сервер. Предположим, что User1 сопоставлен с User2. User1 отправит User2 и room_id на сервер. Затем я отправляю сообщение обратно в группу, связанную с полученным идентификатором пользователя. То есть я посылаю сообщение с вебсокета User1 на клиент User2.
Однако, когда я реализую эту логику, пользователь User2 не получает никаких сообщений.
Вот что у меня есть в consumers.py:
class PracticeConsumer(AsyncConsumer):
username_id = None
async def websocket_connect(self, event):
username = self.scope['user']
username_id = str(await self.get_user(username))
group_name = username_id
await self.channel_layer.group_add(
'{}'.format(group_name),
self.channel_name
)
await self.send({
"type": "websocket.accept"
})
async def websocket_receive(self, event):
received = event["text"]
invite_data = received.split()
matched_user = invite_data[0]
username = invite_data[2]
user_id = str(await self.get_user(matched_user))
my_response = {
"message": "!!!!the websocket is sending this back!!!!"
}
sleep(1)
await self.channel_layer.group_send(
'{}'.format(user_id),
{
"type": "send.message",
"message": json.dumps(my_response),
"username": username
})
...
async def send_message(self, event):
message = event['message']
await self.send({
'message': message
})
@database_sync_to_async
def get_user(self, user_id):
try:
return User.objects.get(username=user_id).pk
except User.DoesNotExist:
return AnonymousUser()
Сообщение регистрируется в моем терминале, но фактически не отправляется клиенту. Вот полный отслеживание, которое я вижу:
INFO 2022-09-26 10:09:43,129: WebSocket CONNECT /connect/testing/ [127.0.0.1:56653]
INFO 2022-09-26 10:09:44,239: sending message inside presenter{"message": "!!!!the websocket is sending this back!!!!"}
INFO 2022-09-26 10:09:44,240: sending message inside presenter{"message": "!!!!the websocket is sending this back!!!!"}
Exception inside application: 'type'
Traceback (most recent call last):
File "C:\Users\15512\Desktop\django-project\peerplatform\signup\middleware.py", line 45, in __call__
return await super().__call__(scope, receive, send)
...
File "C:\Users\15512\anaconda3\lib\site-packages\channels\consumer.py", File "C:\Users\15512\Desktop\django-project\peerplatform\signup\consumers.py", line 76, in send_message
await self.send({
File "C:\Users\15512\anaconda3\lib\site-packages\channels\consumer.py", line 81, in send
await self.base_send(message)
File "C:\Users\15512\anaconda3\lib\site-packages\channels\sessions.py", line 186, in send
message["type"] in self.save_message_types