Невозможно отправить сообщение определенной группе в Django Channels

У меня есть вебсокет, который получает токен в качестве строки запроса. Затем мое пользовательское промежуточное ПО декодирует этот токен, чтобы найти имя пользователя, переданное через этот токен.

Текущий пользователь, подключающийся к вебсокету, затем подписывается на группу, названную его именем user_id. Предположим, что пользователь UserA проходит через этот процесс сначала и подписывается на группу '1'

ПользовательВ затем подключается к вебсокету, следуя тому же процессу. На данном этапе я предполагаю, что есть две группы: одна с именем '1' и другая с именем '2'.

После того, как UserA срабатывает метод send & receive во фронтенде, у меня есть потребительская функция, которая отправляет сообщение в группу с полученным идентификатором пользователя ('2').

Однако, когда этот код выполняется, кажется, что я не отправляю сообщение ни одной группе. Я не получаю никакого сообщения об ошибке (я вижу, как сообщение, которое я хочу отправить, печатается на моем терминале).

Однако, когда я открываю два браузера, один с UserA, а другой с UserB, когда я подключаюсь к websocket и запускаю send/receive, я не вижу, что сообщение, которое я отправляю, регистрируется консолью в обоих браузерах.

Вот код для класса потребителя, обрабатывающего методы connect, send и receive:

class PracticeConsumer(AsyncConsumer):
    async def websocket_connect(self, event):
        username = self.scope['user']
        username_id = str(await self.get_user(username))
        await self.channel_layer.group_add('{}'.format(username_id), self.channel_name)
        await self.send({"type": "websocket.accept", })
        
    async def websocket_receive(self, event):
        received = event["text"]
        user_and_id = received.split()
        username = user_and_id[0]
        user_id = str(await self.get_user(username))
        sleep(1)
        await self.channel_layer.group_send(
            '{}'.format(user_id),
            {
                "type": "send.message",
                "message": "!!!!the websocket is sending this back!!!!",
            },
        )

    async def websocket_disconnect(self, event):
        print("disconnected", event)

    async def send_message(self, event):
        message = event['message']
        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()
Вернуться на верх