Фрилансеры предложат решение вашей задачи уже через несколько минут!

Публикация заказа на фриланс бирже не займет много времени.

4 месяца назад
Евгений
33 года, Россия
10 лет в сервисе
Был онлайн 2 месяца назад
5 отзывов
50% заказов с выбором исполнителя
4 месяца назад

Общее описание

Требуется разработать утилиту, которая будет пробрасывать данных от передатчика текстовых сообщений на TCP в облако по URL, за которым реализован WebSocket-сервер.

Общая архитектура

Telemetry Relay — Windows-сервис, утилита, работающая в фоновом режиме, которая забирает по TCP сообщения от программы телеметрии (доступна по локальной сети) по протоколу TCP и ретранслирует их в облако.

Telemetry Receiver — ресурс по URL (задается в конфигах), реализованный как WebSocket-сервер, который принимает сообщения и сохраняет в базу.

Требования к Telemetry Relay


  • Запускается как сервис в Windows
  • Настраивается через файл settings.ini в папке с программой
  • Инсталлятор не требуется, буду просто копировать папку в Program Files самостоятельно

Описание файла settings.ini


telemetry_ip = 127.0.0.1
telemetry_port = 50000
telemetry_timeout = 60


cloud_url = https://example.ru/api/v3/telemetry/receiver/
cloud_timeout = 60
cloud_token = sdkjhadsfkjhdsfjhdsafkafk2332kjkj32dsdskaf
Таймауты указываются в секундах. При недоступности ресурса утилита бесконечно пытается подключиться.

Описание логики работы

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

2. Попытаться подключиться к облаку.
- При подключении необходимо отправить заголовок "Authorization: Bearer CLOUD_TOKEN_FROM_SETTINGS_INI_FILE".
- При любых ошибках в подключении бесконечно продолжать пытаться подключиться с таймаутом из конфига.
- В случае успешного подключения по WebSocket, первым сообщением сервер пришлет сообщение {"lastInsertId":SOME_INTEGER_OR_ZERO}, которое будет означать последний полученный ID от данной точки (идентифицируется по токену).
- Прочитав lastInsertId, нужно в папке data найти сообщение с номером больше, чем lastInsertId и передать их скоупом в облако. Формат сообщения: {"id":SOME_INTEGER_ID, "message":"RAW_MESSAGE_FROM_TCP_SERVER"}
- Затем программа начинает работать в режиме прослушивания и ретранслирования (см. пункт №4).

3. При получении сообщения по TCP, разделить его по переводу строки (сообщение = отдельная строка с текстом, может быть кириллица), присвоить этому сообщению уникальный порядковый номер и сохранить полученное сообщение в папке data.
- В день будет набегать примерно 5 мегабайт данных.
- Данные за каждый день нужно складывать в отдельные файлы в таком формате — 2020-12-01.txt
- Сообщения в файлах нужно хранить в виде json'а. Структура json'а: {"id":SOME_INTEGER_ID, "message":"RAW_MESSAGE_FROM_TCP_SERVER"}.

4. Параллельно тому, как сообщения складываются на диск, необходимо как можно быстрее и с минимальной задержкой отправлять сообщения в облако по WebSocket.
- При ошибках на сервере будет разорвано подключение, поэтому пока подключение есть, значит сообщения успешно обрабатываются и например смещать внутренний указатель в программе последнего отправленного сообщения.
- Формат сообщения: {"id":SOME_INTEGER_ID, "message":"RAW_MESSAGE_FROM_TCP_SERVER"}

Другие важные требования

Наиболее критичным приоритетом работы программы является стабильное прослушивание всех сообщений без потерь (т.к. повторно отправить сообщение возможности не будет).

Следующим приоритетом является скорость отправки сообщения в облако — нужен лаг не более 0.5 с. В идеале 0.1-0.2 с.

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

Если что-то упущено — просьба дополнить, и бюджет на работу будет увеличен.

Выбранный исполнитель
Илья А.
Илья А. 
19 лет, Украина
5 месяцев в сервисе
Был онлайн 1 час назад
4 месяца назад

$210

32 дня

Безопасный платеж

ТОП-10 — Прикладное ПО
Отзыв заказчика
Отличный исполнитель, грамотный, все сделал, что задумали.
Отзыв фрилансера
Отличный заказчик, грамотно поставленное тз и быстрая оплата. Всем рекомендую и надеюсь на дальнейшее сотрудничество
Алексей Чернов
47 лет, Россия
4 года в сервисе
Был онлайн 14 дней назад
4 месяца назад
Григорий К.
Григорий К. 
29 лет, Украина
9 месяцев в сервисе
Был онлайн 6 дней назад
4 месяца назад

Безопасный платеж

Илья А.
Илья А. 
19 лет, Украина
5 месяцев в сервисе
Был онлайн 1 час назад
4 месяца назад

Безопасный платеж

ТОП-10 — Прикладное ПО

Другие заказы в категории «Прикладное ПО»

Здесь заказчик и фрилансеры могут обсуждать заказ до начала его выполнения.
Фрилансеры могут участвовать в обсуждении только после подачи заявки.
Здесь заказчик будет контролировать выполнение заказа и общаться с исполнителем.
Доступ к этому разделу имеют только заказчик и выбранный исполнитель.
Все материалы этого раздела закрыты от поисковых систем.