Я создаю систему IoT Device + Server, используя .NET Micro Framework и ASP.NET WebAPI (вероятно, в Azure).
Устройство IoT должно иметь возможность часто обновлять сервер со статистикой, а также получать время от времени входящие команды с сервера, которые могут изменить его поведение. В этом смысле устройство должно действовать и как клиент, и как сервер.
Я беспокоюсь о наилучшем балансе между безопасностью устройства и нагрузкой на сервер. Кроме того, должна быть относительно небольшая задержка между сервером, которому необходимо выдать команду, и устройством, выполняющим ее; порядка нескольких секунд.
Как я вижу, мои варианты:
При подключении к Интернету устройство устанавливает постоянное TCP-соединение с сервером, которое затем используется как для опроса, так и для получения команд.
Устройство прослушивает порт (например, HttpListener) для входящих команд, одновременно обновляя сервер с помощью частых HTTP-запросов.
Устройство всегда опрашивает сервер только с HTTP-запросами. Сервер использует ответ для передачи команд устройству.
Второй вариант кажется наименее безопасным, поскольку на устройстве будут открыты входящие порты. Первый вариант кажется наиболее сложным для надежной реализации, так как он требует низкоуровневого программирования сокетов. Третий вариант кажется простым и безопасным, но из-за требований к задержке устройству нужно будет опрашивать каждые несколько секунд. Это влияет на масштабируемость системы.
Итак, с какой частотой опрос HTTP создает больше накладных расходов, чем просто постоянное поддержание TCP-соединения открытым? 5 с? 3 секунды? 1с? Или я преувеличиваю накладные расходы на поддержание открытого TCP-соединения в ASP.NET? Или есть совершенно другой способ, которым это может быть реализовано?
Спасибо.