Как лучше всего уведомить невеб-приложение об изменении на веб-странице?
-
03-07-2019 - |
Вопрос
Допустим, у меня есть два приложения, которые в определенной степени должны работать вместе.
- Веб-приложение (PHP, Ruby on Rails,...)
- Настольное приложение (Java, C++,...)
Настольное приложение должно быть уведомлено из веб-приложения, а задержка между отправкой и получением уведомления должна быть короткой.(< 10 секунд)
Каковы возможные способы сделать это?Я могу подумать об опросе с интервалом в 10 секунд, но это приведет к увеличению трафика, если придется уведомлять многие настольные приложения.В локальной сети я бы использовал широковещательную рассылку UDP, но, к сожалению, здесь это невозможно...
Я ценю любые идеи, которые вы можете мне дать.
Решение
Я думаю, что «лучшая практика» здесь будет зависеть от количества настольных клиентов, которые вы планируете обслуживать.Если уведомляется только один рабочий стол, то опрос вполне может быть подходящим подходом — да, опрос требует гораздо больше накладных расходов, чем уведомление на основе событий, но это, безусловно, будет самое простое решение для реализации.
Если накладные расходы на опрос действительно неприемлемы, то я вижу две основные альтернативы:
- Поддерживайте постоянное соединение между рабочим столом и веб-сервером (это может быть веб-запрос в стиле «кометы» или соединение через необработанный сокет).
- Откройте доступ к службе из настольного приложения и зарегистрируйте адрес службы на веб-сервере.Таким образом, веб-сервер может обращаться к рабочему столу по мере необходимости.
Однако будьте осторожны: обе альтернативы полны ошибок.Несколько основных моментов:
- Поддерживать соединение открытым может быть сложно, поскольку вы хотите, чтобы ваши веб-серверы имели возможность горячей замены.
- Вызов внешнего сервиса (например, вашего рабочего стола) с веб-сервера опасен, поскольку этот запрос может зависнуть.Вы можете переместить это уведомление в отдельный поток, чтобы не перегружать веб-сервер.
Чтобы смягчить некоторые проблемы, вы можете отделить ненадежный рабочий стол от веб-сервера, введя промежуточный сервер уведомлений - веб-сервер может публиковать где-то обновление, а рабочий стол может опрашивать/подключаться/регистрироваться там для получения уведомлений.Чтобы не изобретать велосипед, можно использовать какую-то систему MessageQueue...Это, конечно, усложняет необходимость содержания нового посредника.
Опять же, все эти подходы, вероятно, довольно сложны, поэтому я бы сказал, что опрос, вероятно, лучший выбор.
Другие советы
Я вижу два пути:
- Ваше настольное приложение опрашивает веб-приложение
- Ваше веб-приложение уведомляет настольное приложение
Ваше веб-приложение может публиковать RSS-канал, но вашему настольному приложению все равно придется опрашивать канал каждые 10 секунд.
Трафик не должен быть огромным:если вы используете HTTP ГОЛОВА запросите, вы получите небольшой пакет с датой последней модификации (удобно названной Последнее изменение).
Я не знаю точно, что нужно сделать для достижения вашей задачи, но я могу предложить создать службу Windows на настольном ПК.
Этот сервис проверяет веб-приложение каждый интервал времени на наличие новых изменений, и если изменения произошли, он может запустить настольное приложение с уведомлением о том, что в веб-приложении и веб-приложении произошли изменения, когда на любое изменение вы можете ответить подтверждение р>
Я надеюсь, что это может быть полезно. Я не пробовал это точно, но я предлагаю использовать эту идею.
Уровень синдикации поможет расширить систему.
Настольное приложение может зарегистрироваться в " publisher " служба (запущенная на одном из нескольких / многих компьютеров) Эта служба издателя получает & уведомление " из вашего веб-приложения, что-то изменилось, и немедленно начинает уведомлять всех своих зарегистрированных подписчиков.
Количество необходимых издателей будет увеличиваться с увеличением количества пользователей.
Изменить. Забыл упомянуть, что настольное приложение должно будет прослушивать сокет.