Как лучше всего уведомить невеб-приложение об изменении на веб-странице?

StackOverflow https://stackoverflow.com/questions/817167

Вопрос

Допустим, у меня есть два приложения, которые в определенной степени должны работать вместе.

  1. Веб-приложение (PHP, Ruby on Rails,...)
  2. Настольное приложение (Java, C++,...)

Настольное приложение должно быть уведомлено из веб-приложения, а задержка между отправкой и получением уведомления должна быть короткой.(< 10 секунд)

Каковы возможные способы сделать это?Я могу подумать об опросе с интервалом в 10 секунд, но это приведет к увеличению трафика, если придется уведомлять многие настольные приложения.В локальной сети я бы использовал широковещательную рассылку UDP, но, к сожалению, здесь это невозможно...

Я ценю любые идеи, которые вы можете мне дать.

Это было полезно?

Решение

Я думаю, что «лучшая практика» здесь будет зависеть от количества настольных клиентов, которые вы планируете обслуживать.Если уведомляется только один рабочий стол, то опрос вполне может быть подходящим подходом — да, опрос требует гораздо больше накладных расходов, чем уведомление на основе событий, но это, безусловно, будет самое простое решение для реализации.

Если накладные расходы на опрос действительно неприемлемы, то я вижу две основные альтернативы:

  1. Поддерживайте постоянное соединение между рабочим столом и веб-сервером (это может быть веб-запрос в стиле «кометы» или соединение через необработанный сокет).
  2. Откройте доступ к службе из настольного приложения и зарегистрируйте адрес службы на веб-сервере.Таким образом, веб-сервер может обращаться к рабочему столу по мере необходимости.

Однако будьте осторожны: обе альтернативы полны ошибок.Несколько основных моментов:

  • Поддерживать соединение открытым может быть сложно, поскольку вы хотите, чтобы ваши веб-серверы имели возможность горячей замены.
  • Вызов внешнего сервиса (например, вашего рабочего стола) с веб-сервера опасен, поскольку этот запрос может зависнуть.Вы можете переместить это уведомление в отдельный поток, чтобы не перегружать веб-сервер.

Чтобы смягчить некоторые проблемы, вы можете отделить ненадежный рабочий стол от веб-сервера, введя промежуточный сервер уведомлений - веб-сервер может публиковать где-то обновление, а рабочий стол может опрашивать/подключаться/регистрироваться там для получения уведомлений.Чтобы не изобретать велосипед, можно использовать какую-то систему MessageQueue...Это, конечно, усложняет необходимость содержания нового посредника.

Опять же, все эти подходы, вероятно, довольно сложны, поэтому я бы сказал, что опрос, вероятно, лучший выбор.

Другие советы

Я вижу два пути:

  • Ваше настольное приложение опрашивает веб-приложение
  • Ваше веб-приложение уведомляет настольное приложение

Ваше веб-приложение может публиковать RSS-канал, но вашему настольному приложению все равно придется опрашивать канал каждые 10 секунд.

Трафик не должен быть огромным:если вы используете HTTP ГОЛОВА запросите, вы получите небольшой пакет с датой последней модификации (удобно названной Последнее изменение).

Я не знаю точно, что нужно сделать для достижения вашей задачи, но я могу предложить создать службу Windows на настольном ПК.

Этот сервис проверяет веб-приложение каждый интервал времени на наличие новых изменений, и если изменения произошли, он может запустить настольное приложение с уведомлением о том, что в веб-приложении и веб-приложении произошли изменения, когда на любое изменение вы можете ответить подтверждение

Я надеюсь, что это может быть полезно. Я не пробовал это точно, но я предлагаю использовать эту идею.

Уровень синдикации поможет расширить систему.

Настольное приложение может зарегистрироваться в " publisher " служба (запущенная на одном из нескольких / многих компьютеров) Эта служба издателя получает & уведомление " из вашего веб-приложения, что-то изменилось, и немедленно начинает уведомлять всех своих зарегистрированных подписчиков.

Количество необходимых издателей будет увеличиваться с увеличением количества пользователей.

Изменить. Забыл упомянуть, что настольное приложение должно будет прослушивать сокет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top