Я думаю, что «лучшая практика» здесь будет зависеть от количества настольных клиентов, которых вы ожидаете обслуживать. Если нужно уведомить только один рабочий стол, тогда опрос вполне может быть хорошим подходом - да, опрос намного сложнее, чем уведомление на основе событий, но это, безусловно, будет самое простое решение для реализации.
Если затраты на опрос действительно неприемлемы, тогда я вижу две основные альтернативы:
- Сохранять постоянное соединение открытым между рабочим столом и веб-сервером (это может быть веб-запрос в стиле «кометы» или необработанное сокетное соединение)
- Предоставьте сервис из настольного приложения и зарегистрируйте адрес сервиса на веб-сервере. Таким образом, веб-сервер может вызывать рабочий стол по мере необходимости.
Но будьте осторожны - обе альтернативы переполнены гочами. Несколько основных моментов:
- Поддержание открытого соединения может быть непростым делом, так как вы хотите, чтобы ваши веб-серверы были с возможностью горячей замены
- Вызов внешнего веб-сервера (например, рабочего стола) с веб-сервера опасен, поскольку этот запрос может зависнуть. Вы бы хотели переместить это уведомление в отдельный поток, чтобы не связывать веб-сервер.
Чтобы смягчить некоторые проблемы, вы можете отсоединить ненадежный рабочий стол от веб-сервера, введя промежуточный сервер уведомлений - веб-сервер может где-то публиковать обновления, и рабочий стол может опрашивать / подключать / регистрировать там быть уведомленным. Чтобы не изобретать колесо здесь, это может потребовать какой-то системы MessageQueue ... Это, конечно, добавляет сложности в поддержании нового посредника.
Опять же, все эти подходы, вероятно, довольно сложны, поэтому я бы сказал, что опрос - это, пожалуй, лучший выбор.