Отправка данных последовательного порта через websocket во фреймворке Django

Мне нужно визуализировать данные на веб-сервере на базе Django, которые захватываются через последовательный порт, как поток.

Я использую пакет python **serial ** для прослушивания последовательного порта, и храню эти данные в DB.

У меня также есть Django-приложение, использующее async websocket с целью немедленного обновления на стороне клиента при получении новых данных.

Хотя я не могу соединить эти два приложения вместе.

Я полагал, что ChannelLayer может быть ключом, хотя больше нет разных экземпляров приложения, только один. Так что это может быть неправильный подход.

Я также думаю о Worker или Background Task, однако я не понимаю, как/где я должен реализовать serial-port listener, который по сути является бесконечным циклом:

        while True:
            data = serial_connection.read_until()
            if data == b"EOF":
                break

            print(data)

Используя https://channels.readthedocs.io/en/stable/topics/worker.html в качестве ссылки, я думаю, она должна быть внутри потребителя:

# Inside a consumer
self.channel_layer.send(
    "serialport-listener",
    {
        "type": "listener",
        "id": 123456789,
    },
)

Какова концепция и архитектура, которая может решить эту проблему?

Один критерий: поскольку производительность имеет значение, я бы предпочел отправлять захваченные данные клиенту, прежде чем сохранять их в БД.

Вернуться на верх