Задать вопрос

На чем лучше строить проект?

Всем привет! Имеется проект/идея, частично связан с железом, серверной частью, и мобильным приложением.
Суть проекта:
Имеются gsm модули, которые время от времени присылают через TCP сокеты в байтах на сервер. Сервер их парсит, сохраняет в бд, и дальше передает на моб приложения (HTTP/HTTPS, иногда в режиме реального времени, думаю тут использовать ВебСокеты). Уже несколько дней пытаюсь разобраться на чем лучше написать и как соединить два протокола запросов (HTTP/TCP) в одном фреймворке. На данный момент написал парсер TCP сокетов на asyncio.

Прошу мне помочь, так как уже определенная каша в голове:
1. на каком фреймворке лучше всего написать сервер? Так как Flask/aiohttp/Django имеют поддержку только ВебСокетов, а мне нужно еще как-то получать TCP сокеты.
2. Могу ли я просто через WSGI поднять два демона - допустим Flask(WebSocket + HTTP) и на втором демоне будет TCP сервер?

С таким родом задач никогда не сталкивался, поэтому прошу помочь, возможно кто-то уже проходил эту тропинку. Заранее благодарю за ответ!
  • Вопрос задан
  • 468 просмотров
Подписаться 6 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Стоит написать два сервиса: Один будет принимать tcp-соединения от железа и писать информацию в БД, а второй будет обрабатывать http-запросы от мобильных приложений. Только websocket'ы для общения с мобильными устройствами - это плохая идея. Во-первых, батарею будет жрать, а во-вторых, будут частые обрывы. Лучше использовать push-уведомления и краткосрочные соединения.
Ответ написан
Сергей правильно расписал. Для ещё большей гибкости я бы посоветовал использовать очереди.
Тогда первый сервис будет парсить tcp-соединения и класть сообщение в очередь (RabbitMQ, Kafka). Вторая часть, которая будет бэкендом для мобильных приложений, будет читать ещё и очередь. При получении сообщения из очереди, записывает в базу и шлёт PUSH сообщение на мобилки. Также мобилки могут иногда сами запросить данные (при первом запуске или при pull-to-refresh фиче, например), тогда ваше API вернёт данные из базы.

Если нужен прям реальный realtime, то тогда это вопрос другого порядка. Скорее всего нужно написать демона, который будет парсить tcp и транслировать UDP. А мобилки будут на это подписываться. Но тут есть нюансы с авторизацией и т.п. Зависит от вашего функционала. Но чаще всего настоящий realtime не нужен. Задержка в секунду более чем допустима для тех сервисов, которые нас окружают.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽