Порт Считыватель последовательных устройств SignalR на микросервисы Docker - PullRequest
0 голосов
/ 19 января 2019

В настоящее время у меня есть служба DotNet Core, размещенная на IIS, которая подключается к нескольким устройствам RS232 через шлюзы TCP / IP.

Служба непрерывно считывает данные с устройств seral, анализирует дату и сохраняет проанализированные значения.Служба подключается к нескольким маркам устройств RS232, каждое из которых имеет собственный протокол сообщений.Поэтому у меня есть классы для каждой марки для подключения и анализа, а также файл настроек, в котором хранится имя устройства, IP-адрес и тип, который нужно использовать для чтения с этого конкретного устройства.

Служба IIS также имеетКонцентратор SignalR, к которому клиенты могут подключаться и подписываться, указав имя конкретного последовательного устройства, чтобы получить проанализированное значение от этого устройства.

По мере роста моего проекта и добавления в него дополнительных последовательных устройствчтение из него стало действительно неуклюжим для управления и отладки.Многие бренды используют одинаковые схемы подключения, поэтому я могу использовать один и тот же базовый класс и просто реализовать функцию синтаксического анализатора в производном классе.Некоторые данные передаются непрерывно, в то время как другие требуют опроса и т. Д.

Иногда клиенты перестают получать данные, и пользователям необходимо перезагрузить веб-страницу.Это может быть вызвано моей попыткой уменьшить сетевой трафик и использование памяти путем удаления объектов устройства чтения последовательных устройств, когда последний подключенный клиент для определенного устройства отключается.(Отслеживание соединений SignalR на самом деле не так просто.)

Так что я думаю о переносе решения в Docker с контейнером для каждого последовательного устройства, и я надеюсь получить некоторую информацию, прежде чем ясделайте решительный шаг и начните рефакторинг моего решения.

  • Будет ли это хорошим подходом к моим проблемам?Есть ли какие-либо очевидные препятствия с таким подходом?

  • Как мне управлять базой кода для SerialDeviceReaders, так как устройства одного бренда будут иметь идентичные реализации, только разные ip-адреса, в то время какдругие будут сильно отличаться.

    • Должен ли я сохранить код для разных брендов в их отдельных проектах, а также создать и образ для каждого бренда?
    • Или создать одно изображение с кодом извсе бренды и использовать аргументы при запуске контейнеров, чтобы решить, какую специфическую для бренда реализацию загрузить при запуске основного приложения dontnet?
  • В настоящее время концентратор SignalR считывает сохраненные последниеанализируемое значение напрямую из объектов последовательного устройства.Должен ли я поместить службу кэширования, такую ​​как redis или MQTT, между SignalR и контейнерами устройств?

  • Действительно ли SignalR действительно необходим в этом сценарии, или есть ли возможность для веб-клиентов напрямую подписаться на такие службы кэширования, какRedis и MQTT?

Любой вклад будет принята с благодарностью!

...