Александр Леонов уже писал в блоге о таком продукте, как ArcGIS GeoEvent Processor for Server. Прочитать и посмотреть подготовленное им видео можно здесь. И теперь еще одна порция полезной информации об этом продукте:)
Одной из особенностей GeoEvent Processor является поддержка протокола WebSocket. Этот протокол предназначен для обмена сообщениями между браузером и веб-сервером в режиме реального времени. WebSocket — это расширение протокола HTTP (синхронный протокол HTTP, построенный по модели «запрос — ответ») c WebSocket становится полностью асинхронным и симметричным. Отправил запрос и идешь дальше, ждать не надо — ответа со второй стороны не требуется. Прочитать подробно о WebSocket можно здесь.
Почему в GeoEvent Processor поддерживается данный протокол? Потому что GeoEvent Processor необходим нам для работы в режиме реального времени (информация о положении транспорта, показания датчиков и др.), а значит наше веб-приложение, где будут отображаться результаты, становится требовательным к скорости обмена каналу за счет интенсивного обмена данными.
Теперь посмотрим, что было до WebSocket и чем этот метод лучше в случае получения событий реального времени:
1. Polling. Самый простой, но не совсем эффективный метод. Клиент периодически опрашивает сервер на наличие событий. Даже если событий нет — клиент делает запрос, на случай, если что-то придет. Минусы метода:
· Очень много лишних запросов
· События всегда приходят с опозданием
· Серверу приходится хранить события пока клиент не заберет их или пока они не устареют
2. Long Polling
Улучшенный вариант предыдущего метода. Клиент отправляет запрос на сервер, сервер держит открытым соединение пока не придут какие-либо данные или клиент не отключится самостоятельно. Как только данные пришли — отправляется ответ и соединение закрывается и открывается следующее и так далее.
3. WebSockets
Этот протокол позволяет клиенту и серверу общаться на равных. WebSocket применяют, когда требуется работа с событиями близкими к реальному времени. Плюсы по сравнению с Long Polling:
· Поднимается одно соединение
· Предельно высокая временная точность событий
Таким образом при использовании протокола WebSocket для работы с GeoEvent Processor мы снижаем нагрузку на наш канал передачи данных, а также получаем события практически без опоздания.