Я написал Android VPN-приложение, которое использует пользовательский протокол с пользовательским сервером, и все отлично работает в нормальных условиях. Он использует пакеты keep-alive для обнаружения функциональности сервера и будет переподключаться к серверу, если его соединение с сервером оборвется. Мое приложение повторяет подключение к серверу в течение примерно 20 минут. Если время простоя сервера меньше 20 минут, механизм переподключения моего приложения снова подключится к серверу без проблем. Но если время простоя сервера превышает 20 минут, мое приложение останавливается, и его необходимо снова запустить вручную.
Теперь для моего приложения появилось новое требование. Мое приложение будет использоваться на стационарном устройстве на базе Android с источником питания, и приложение должно работать постоянно, если сервер не работает (или сеть на сервер). Так как эти стационарные устройства в основном беспилотные, предпочтительнее использовать подход, в котором человеческое взаимодействие отсутствует.
Есть два очевидных подхода, которые мне не нравятся:
- Принуждение пользователей кВручную запустите приложение снова, если соединение с сервером длительное время не работает. Кто-то может сказать, что этот подход лучше, потому что если сервер не работает в течение длительного времени, бесполезно поддерживать работу клиентов.
- Повторное подключение в течение неограниченного времени (или, по крайней мере, до тех пор, пока кто-то не остановит его вручную). Но такой подход тратит ресурсы устройства.
Интересно, как наиболее логично справиться с этим условием в сетевом приложении? особенно в приложении для Android?