Всем доброго времени суток!
Есть 2-3 клиента на raspberry pi c GPRS интернетом и сервер с белым ip.
Задача: (Двунаправленный асинхронный обмен данными)
Необходимо получать оперативную информацию (в режиме режиме реального времени 24/7) от клиента и так-же оперативно иметь возможность отправить данные сервер->клиент.
Пример для понимания:
1. Серверу нужно знать статус клиента (online/offline).
2. Получать данные от клиента (например мониторить запущенный сторонний процесс в системе).
3. Время от времени отправлять команды сервер -> клиент.
Перечитал много информации, но так и не нашел однозначного ответа.
Какой алгоритм работы в данной ситуации будет правильным?
1. Клиент постоянно держит сокет открытым (при разрыве связи клиент пытаться переподключиться).
2. Клиент периодично (раз в секунду) обменивается данными открывая и закрывая сокет.
"Достаточно оперативно" вообще не требование для разработки а просто сильно абстрактное пожелание.
Сокеты придется тюнить ибо ГПРС оборвется резко и ни клиент ни сервер мнооого секунд не заметят этого. И придется еще подгонять, чтобы при тормозном ГПРС ложных срабатываний не было.
3. Клиент периодично (раз в секунду) обменивается данными НЕ закрывая сокет, этого хватит чтобы с не закрылся сам через 2 часа, и также это (+таймауты) позволит клиенту отследить некорректный разрыв.