Отправка данных последовательного порта через 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,
},
)
Какова концепция и архитектура, которая может решить эту проблему?
Один критерий: поскольку производительность имеет значение, я бы предпочел отправлять захваченные данные клиенту, прежде чем сохранять их в БД.