4

Предположим, у меня есть два приложения, которые должны работать в определенной степени.Каков наилучший способ уведомить не веб-приложение об изменении на веб-странице?

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

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

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

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

+0

Было ли мое предложение убедить вас? – Ahmy

+0

Нет, это по сути то же самое, что я предложил в моем вопросе. Я все еще жду чего-то еще. Но я не получу лучшего решения, я приму свой ответ :) –

ответ

3

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

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

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

Будьте осторожны, однако - обе альтернативы полны захлебков.Несколько основных моментов:

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

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

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

1

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

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

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

3

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

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

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

Трафик не должен быть огромным: если вы используете HTTP HEAD запрос, вы получите небольшой пакет с датой последнего изменения (обычно с именем Last-Modified).

1

Слой синдикации поможет уменьшить масштаб системы.

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

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

Редактировать: Забыл отметить, что настольному приложению необходимо будет прослушивать сокет.

Смежные вопросы