31.03.2011

Публикация бесконечного XML потока с помощью Reactive Extensions

В догонку к статье о чтении бесконечного XML потока решил приложить простой вариант реализации сервера, публикующего такой поток.

Схема работы сервера простая.

1. Создаем HttpListener и обработчик входящих соединений. Все удачные соединения передаем в метод HandleClient.
2. Создаем XmlFeed и в обработчиках соединений подписываемся на него.
3. Перед тем как начать отправлять клиенту данные из основного потока, оповещаем его об успешном соединении - здесь в случае более сложной логики, требующей передачи текущего состояния подписки клиенту, можно отправить это состояние.
4. Для мониторинга активности сервера и доступности клиентов создаем поток сообщений типа "alive", которые рассылаются раз в десять секунд.
5. Для мониторинга доступности клиента для каждого подключения создаем поток оповещений heartbeat - наличие сообщения в этом потоке указывает серверу о том, что клиент готов получить очередные данные. В случае, если при отправке очередного сообщения клиенту произошла ошибка, то считаем что клиент отключился и закрываем поток данных heartbeat, что приводит к автоматической отписке от данных и удалению всех объектов из памяти при следующем цикле сбора мусора.

Полный исходный код примера можно скачать с сервера xp-dev.com

Вот собственно и все. Удачи!

0 коммент.:

Отправить комментарий