Skip To Content

Потоковые сервисы

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

Такой подход требует изменений. Необходимо обеспечить непрерывность потока данных в виде архивирования, параллельно с передачей данных событий клиентам. Рекомендуется использовать потоковый сервис - вариант сервиса ArcGIS Server.

Введение в потоковые сервисы

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

Для использования потоковых сервисов требуется лицензировать GeoEvent Server и установить его в среде ГИС. Потоковый сервис может быть включен в веб-карты ArcGIS Online и Portal for ArcGIS, в ArcGIS Pro, а также работает в клиентских приложениях, разработанных с помощью ArcGIS Maps SDK for JavaScript.

Потоковые сервисы используют технологию WebSocket, которая поддерживает полнодуплексный двунаправленный обмен данными. Это позволяет клиентам указывать, какие данные им необходимо получить, без отключения и повторного подключения к сервису. Клиенты могут фильтровать данные потокового сервиса с помощью пространственных или атрибутивных условий.

Подключение к потоковому сервису для получения данных в реальном времени позволяет отделить необходимость немедленного отображения событий от необходимости хранения данных в базе. Настроив выход GeoEvent Server на передачу данных событий через потоковый сервис, вы получите возможность сохранения данных событий в многопользовательском реляционном хранилище или в хранилище пространственно-временных больших данных, но для визуализации данных это не требуется.

На рисунке ниже показано сравнение традиционного способа получения, обработки и использования данных объектов с получением и передачей данных в реальном времени с помощью потоковых сервисов.

Традиционный рабочий процесс и получение и передача данных в реальном времени с помощью потоковых сервисов

На рисунке выше показано, что до появления потоковых сервисов, данные, полученные в реальном времени, сначала записывались в класс объектов, что требовало наличия многопользовательской базы геоданных. Для отображения данных, клиентские приложения должны были периодически обращаться к сервису объектов, для получения новых объектов и обновлений.

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

Для получения дополнительной информации о потоковых сервисах в GeoEvent Server, обратитесь к руководству по потоковым сервисам, доступному в руководствах по GeoEvent Server.

Публикация потокового сервиса

Потоковые сервисы создаются и публикуются в GeoEvent Manager как часть рабочего процесса настройки выходного коннектора Отправить объекты в потоковый сервис.

При настройке выходного коннектора Отправить объекты в потоковый сервис рекомендуется использовать подключение ArcGIS Server или Portal for ArcGIS, зарегистрированное в качестве значения по умолчанию в GeoEvent Server.

Выходной коннектор Отправить объекты в потоковый сервис, настроенный и запущенный в рамках экземпляра GeoEvent Server, должен быть включен в GeoEvent Service, настроенный и запущенный на этом же GeoEvent Server.

Потоковые сервисы в ArcGIS REST Services Directory

Потоковые сервисы перечислены в ArcGIS REST Services Directory наряду с другими сервисами ArcGIS Server. Просмотрите свойства потокового сервиса и используйте элементы управления для потоковой передачи данных о событиях и подписки на получение данных о событиях от потокового сервиса следующим образом:

  • Щелкните параметр Вещание, чтобы открыть веб-страницу, с которой вы можете создать представление Esri feature JSON одного или нескольких объектов и отправить их клиентам, подключенным к потоковому сервису.
  • Щелкните параметр Подписаться, чтобы открыть веб-страницу, на которой можно подключиться к потоковому сервису для просмотра передаваемых объектов. Если у вас большой объем потока данных, форма на этой странице может быть перегружена. Используйте эту страницу только в течение короткого времени для подтверждения того, что клиенты, подписанные на потоковый сервис, получают данные.

Более подробно о потоковых сервисах в ArcGIS REST API

Использование потокового сервиса

Щелкните на странице свойств потокового сервиса в ArcGIS REST Services Directory ArcGIS JavaScript, чтобы создать HTML-страницу, на которой визуализируются данные, передаваемые потоковым сервисом.

Щелкните ArcGIS JavaScript правой кнопкой мыши и выберите Посмотреть исходный код, чтобы проверить код JavaScript. Разработчики могут использовать и редактировать этот код для создания веб-приложений, использующих потоковые сервисы.

Потоковые сервисы также можно использовать, внедряя их в веб-карту и в ArcGIS Pro.

Более подробно об использовании потоковых сервисов в ArcGIS Pro

Фильтрация потокового сервиса

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

Следующие и другие параметры можно применить во время установки соединения, открыв подключение WebSocket:

  • Задать пространственную привязку для потока данных.
  • Настроить фильтр.
  • Фильтр по геометрии.
  • Фильтр where.

Эти параметры описаны в приведенных ниже разделах.

Задание пространственной привязки для потока данных

Потоковый сервис имеет пространственную привязку по умолчанию, которую можно найти на странице описания сервиса в ArcGIS Server Manager. Если клиент хочет получать данные в другой пространственной привязке, ее нужно задать в момент подключения. После задания пространственной привязки ее нельзя изменить пока подключение работает. Для изменения пространственной привязки необходимо создать новое подключение WebSocket. Чтобы перезаписать пространственную привязку по умолчанию, необходимо использовать ключевое слово outSR, знать общепринятый ID (WKID) требующейся привязки и добавить outSR=<WKID> к URL-адресу. Например, чтобы задать по умолчанию систему координат WGS 1984 Web Mercator (Auxiliary Sphere), WKID которой равен 3857, добавьте outSR=3857 к URL-адресу, такому как ws://HOSTNAME:6180/arcgis/services/Vehicles/StreamService/0/subscribe?outSR=3857.

Настройка фильтра

Фильтр потокового сервиса может содержать пространственный компонент, SQL-подобный компонент и компонент outFields. Каждая из них может быть задана или удалена независимо, т.е. любая, все или ни одна из них могут действовать в любой момент времени. Чтобы задать одну часть фильтра, задайте ее, не трогая другие. Другие части фильтра останутся неизменными.

Фильтр по геометрии

Геометрическая часть фильтра соответствует структуре объектов геометрии JSON, возвращаемых ArcGIS REST API. Для сохранения производительности потокового сервиса в качестве типа геометрии применяются только конверты.

Фильтр также может включать пространственное отношение, заданное ключевым словом spatialRel. Оно представляет пространственное отношение, которое должно применяться ко входной геометрии при выполнении запроса. Единственное поддерживаемое пространственное отношение – это «пересекает» (esriSpatialRelIntersects), используемое по умолчанию.

Предполагается, что фильтр геометрии имеет ту же пространственную привязку, что и подключение, изменить это можно только в момент подключения. Если в качестве части геометрии указана другая пространственная привязка, конверт проецируется в пространственную привязку подключения, что позволяет использовать его при фильтрации объектов из потока данных.

Фильтр where

Фильтр where является SQL-подобным выражением, которое фильтрует объекты из потока данных, проверяя атрибуты на соответствие условию where. Выражение должно быть строковым значением JSON в кавычках. К поддерживаемым операциям относятся AND, OR, NOT, =, !=, <, <=, >, >=, IS NULL, IS NOT NULL, IN и LIKE. Можно сделать сравнение между полем и значением, например, ('field1 > 1') или между двумя схожими полями, например ('field1 > field2'). Для принудительного изменения приоритета можно использовать скобки.

Различные сравнения описаны ниже:

  • Числовой сравнение – пример сравнения поля (Altitude) с числовым значением "Altitude < 1000".
  • Сравнение полей – пример сравнения двух полей: "speed > maxSpeed".
  • Сравнение строк – строки также можно сравнивать. Сравнения учитывают регистр, а буквенные значения должны быть заключены в одинарные кавычки, например, "Departure_Airport='KZSE'".
  • Выражения LIKE – строки можно сравнивать с помощью условия LIKE, применяя подстановочные символы. Знак процента означает любое количество символов, подчеркивание может быть одним любым знаком. В следующем примере выбираются люди, в именах которых буквы am находятся на второй и третьей позиции, например, Samantha и James: "name LIKE '_am%'".
  • Выражения IN – выражение IN позволяет задавать списки буквенных значений. Если поле соответствует любому значению в списке, объект передается потоком. При использовании выражений IN учитывайте следующее:
    • Ниже приводится пример списка строк: "name IN ('Bob','Jane','Henry')".
    • Ниже приводится пример выражения IN, использующего список числовых значений: "alertCode IN (404,500,505)".
    • Также можно использовать логическое поле вместо логического выражения. Например, если объекты содержат логическое поле с именем active, можно написать выражение where, которое будет пропускать все объекты, имеющие значение true в поле active, например: "active".

Фильтр выходных полей

Поля внутри потока данных могут быть отфильтрованы по отдельности, с помощью фильтра выходных полей, задаваемого ключевым словом outFields. Желаемые поля можно задать с помощью списка имен полей, разделенных запятыми.