Эрик, ваша проблема намного проще, чем кажется, что она звучит.
Эта проблема существовала в течение десятилетия, может быть, два.Не нужно заново изобретать колесо.
Почему опрос / пинг - плохая идея
Динамические IP-адреса, предоставляемые интернет-провайдерами, могут иметь переменное время аренды, но часто оно составляет не менее 24-72 часаПинг вашего сервера каждые 1-10 м будет ужасной тратой ресурсов, потенциально совершающих более 4320 бесполезных HTTP-запросов на КЛИЕНТА в течение 72 часов.Каждый запрос будет содержать около 300 байт. * 4320 потраченных впустую HTTP-запросов равняется потере пропускной способности 1,3 Мбайт, умноженной на количество целевых клиентов, равное 1 миллиону клиентов.И это только потраченная впустую полоса пропускания, а не другая полоса пропускания, которая может понадобиться вам для запуска приложения и предоставления полезной информации.
Клиенты должны быть умнее, чем просто пинговать часто.Скорее, они должны быть в состоянии проверить, соответствует ли их IP-адрес DNS при запуске, и только при изменении IP-адреса отправлять уведомление на сервер.Это сократит ваши требования к пропускной способности и обработке сервера в тысячи раз.
То, что вы описываете, - это динамический DNS
То, о чем вы говорите, - это «Динамический DNS» (оба являются описательным названием длятехнология, а также название одной компании, которая предоставляет SaaS-решение.
Динамический DNS - это просто DNS-сервер, который позволяет очень быстро изменять сопоставление между именем и IP-адресом.Обычно это полезно для устройств, использующих интернет-провайдера, который предоставляет только динамические IP-адреса.Всякий раз, когда IP-адрес маршрутизатора / сервера изменяется на динамическом IP-адресе, он сообщает динамическому DNS-серверу об этом изменении.
- Стандартный протокол defacto для динамического DNS хорошо документирован.Начните здесь: API обновления DNS , я думаю, что вы ищете здесь: DynDNS Perform Update .Большинство коммерческих реализаций очень близки к одному и тому же протоколу из-за того, что оборудование маршрутизатора обычно имеет встроенный клиент DynDNS, который каждый хочет использовать.
- Большинство маршрутизаторов (даже дешевых) уже имеют клиенты Dynamic DNSвстроенный в них.(Вы можете написать свой собственный программный клиент, но маршрутизатор, вероятно, является наиболее эффективным местом для этого, поскольку ваши клиенты, вероятно, используют NAT с частным IP-адресом - вы все равно можете сделать это, но за счет большей пропускной способности для обнаружения общего IP-адреса)
- Быстрый поиск в Google по запросу "динамический Java-клиент DNS" вызывает проекты с полным исходным кодом, такие как этот: Клиент Java DynDNS (непроверенный, просто иллюстрирующий всю мощь поиска)
Другие аспекты архитектуры вашей системы
Допустим, проблема сопоставления IP-клиента решена.Вы выяснили все это, и он отлично работает, вы всегда знаете IP для каждого клиента.Будет ли у вас хорошая надежная система для передачи файлов клиентам с мобильных устройств?Я бы сказал, что нет.
У мобильных и домашних компьютеров может быть несколько типов подключения: Wi-Fi, сотовая связь, возможно, проводная связь.Каждая из этих сетей может иметь разные системы безопасности.Таким образом, подключение мобильного сотового телефона к ноутбуку Wi-Fi за домашним маршрутизатором будет сильно отличаться от подключения мобильного устройства Wi-Fi к ноутбуку в той же сети Wi-Fi.
Возможно, у вас есть физические брандмауэры маршрутизатора для борьбыс.Также на домашних компьютерах может быть включен брандмауэр Windows, может быть, Norton Internet Security, может быть, Symantec, может быть AVG, может быть зональная сигнализация и т. Д. Знаете ли вы, что такое брандмауэр для всех этих потенциальных клиентов?