Мой потребитель чата не работает django -каналы? - PullRequest
1 голос
/ 09 февраля 2020

Я пытаюсь создать одноразовое приложение для чата, но мой чат-сокет сразу отключается, когда я отправляю на него данные. Я думаю, проблема в моей асинхронной функции получения моего потребителя? Это не дает мне никакой причины для ошибки? Сокет отключается молча

Вот обработчик получения

async def receive(self, text_data):
    data = json.loads(text_data)
    text = data['message']
    room_name = data['room_name']
    username   = data["username"]
    only_one_user = False
    profile       = self.scope["user"].profile

    # GET THE ROOM AND THE PROFILE
    room_obj    = await database_sync_to_async(Room.objects.get)(pk=self.room_name)
    other_user  = await database_sync_to_async(room_obj.other_user)(profile)

    # CREATE AND ADD THE MESSAGE TO THE ROOM
    message = Message.objects.create(author=profile,text=text,to=other_user.user.username)
    room_obj.messages.add(message)
    room_obj.updated  = timezone.now()
    room_obj.save()
    profile = self.scope["user"].profile
    clients_connected = await database_sync_to_async(Websocketclient.objects.filter)(room=int(self.room_name))


    if clients_connected.count() < 2:
        only_one_user = True                

    # Send message to room group
    await self.channel_layer.group_send(
        self.room_group_name,
        {

            'type': 'chat_message',
            'data': {"text":text,"pk":room_obj.pk,"author":{"username":message.author.user.username,"image":str(message.author.image)},"only_one_user":only_one_user}
        }
    )

Также, как я могу знать, что именно ошибка в моем асин c код если я получу в будущем работу ...

1 Ответ

0 голосов
/ 11 февраля 2020

Message.objects.create также должны быть заключены в database_sync_to_async и room_obj.save()

, если коротко, любая операция с БД должна быть заключена в database_sync_to_async.

Что касается причины ошибки проглотить ... добро пожаловать в asyn c python :)

сделайте попытку, кроме как вокруг тела вашей функции, и распечатайте исключение, которое вы получите, чтобы проверить, что ошибка - это точка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...