LINUX.ORG.RU

Бесконечная отправка сообщений в WebSocket

 , ,


0

1

Доброго времени суток. Есть django + channels, есть задача бесконечной отправки данных в WebSocket. Сейчас это реализовано вот так:

class MyConsumer(AsyncJsonWebsocketConsumer):
    @staticmethod
    @database_sync_to_async
    def _get_objects():
        return MyModel.objects.all().order_by('smb_user')

    async def connect(self) -> None:
        user: any = self.scope['user']
        if user.is_staff:
            await self.accept()
            while True:
                data: any = await self._get_objects()
                data = MyViewSet.serializer_class(data, many=True).data
                await self.send_json(data)
                await asyncio.sleep(1)
Такое чувство, что не совсем правильно. Кто юзал channels, подскажите пожалуйста, как правильно :-)



Последнее исправление: cadogan (всего исправлений: 2)

Такое чувство, что не совсем правильно.

Ну раскрой чувство-то?

Zhbert ★★★★★
()
Ответ на: комментарий от gruy

бесконечной отправки данных в WebSocket

Бесконечно получать данные с сервера и обновлять данные на странице соотвественно.

cadogan
() автор топика
Ответ на: комментарий от cadogan

Просто регулярно получать все данные? Или, все-таки, получать только обновленные данные после их изменения?

Сейчас ты просто гоняешь в цикле весь набор данных. Особых преимуществ WS ты не используешь.

gruy ★★★★★
()
Ответ на: комментарий от gruy

Просто регулярно получать все данные?

Да.

Сейчас ты просто гоняешь в цикле весь набор данных. Особых преимуществ WS ты не используешь.

Да я знаю.

Вообще бесконечный цикл в методе connect это нормально?

cadogan
() автор топика
Последнее исправление: cadogan (всего исправлений: 1)
Ответ на: комментарий от cadogan

По идее нет - connect предназначен для подтверждения или запрещения подключения. Остальные действия выполняются в других функциях потребителя.

gruy ★★★★★
()

Жесть. Зачем там цикл? Отсылай данные в вебсокет только когда есть изменения (post_save сигнал).

Antonova
()
Ответ на: комментарий от Antonova

Отсылай данные в вебсокет только когда есть изменения

Они всегда есть...

post_save сигнал

Не работает, если данные таблицы были изменены из другого места(не из приложения Django).

cadogan
() автор топика
Ответ на: комментарий от cadogan

Мало вводных. Можно дифф делать и отправлять только патч, можно в бд навернуть триггеров/нотифи и писать что изменилось в спец.таблицу, оттуда уже делит ретурнинг-овать. Можно ничо не делать.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.