A medida que se incrementa el número de fuentes de datos que generan transmisiones de datos en tiempo real, aumenta la importancia de que las aplicaciones puedan consumir y mostrar inmediatamente esos datos de eventos. Tradicionalmente, se ha comprobado que la latencia introducida mediante el almacenamiento inicial de los datos de eventos en una clase de entidad de una geodatabase corporativa para que los clientes puedan sondear periódicamente un servicio de entidades a fin de recuperar los datos resulta problemática, especialmente cuando se trabaja con transmisiones de datos de gran volumen.
El paradigma existente debe cambiar. La persistencia de los datos se debe abordar como una tarea de archivado que se realiza en paralelo cuando los datos de eventos se envían en tiempo real a los clientes. La respuesta de Esri es un nuevo tipo de servicio de ArcGIS Server: un servicio de transmisión.
¿Qué es un servicio de transmisión?
Un servicio de transmisión es un tipo de servicio de ArcGIS Server que facilita la diseminación de datos en tiempo real con baja latencia para los flujos de datos cliente/servidor. Los clientes que se conectan a un servicio de transmisión empiezan a recibir datos en cuanto se suscriben al servicio. Los clientes pueden especificar y reconfigurar las restricciones espaciales y de atributos sin anular primero su suscripción y conectarse de nuevo al servicio.
Debe obtener una licencia de GeoEvent Server e instalarla en su sistema SIG corporativo para poder utilizar los servicios de transmisión. En la versión inicial, el contenido del servicio de transmisión se puede incorporar a los mapas web de ArcGIS Online y Portal for ArcGIS y también exponerse a través de clientes desarrollados con la API de ArcGIS para JavaScript. Las versiones futuras admitirán una variedad mayor de suscripciones de clientes.
Los servicios de transmisión recurren a la tecnología WebSocket, que admite la comunicación bidireccional de dúplex completo. Esto permite a los clientes especificar los datos que desean recibir sin tener que anular la suscripción y restablecer la conexión con el servicio. Los clientes pueden filtrar los datos de los servicios de transmisión especificando restricciones espaciales o de atributos.
Conectarse a un servicio de transmisión para recibir una fuente de datos en tiempo real le permitirá separar la necesidad básica de visualización inmediata de eventos de la necesidad de conservar los datos en una base de datos. Mediante la configuración de la salida de GeoEvent Server para divulgar los datos de eventos a través de un servicio de transmisión, tendrá la opción de almacenar los últimos datos de eventos en un data store relacional corporativo o en un big data store espaciotemporal, pero hacerlo no es imprescindible para visualizar los datos.
La ilustración siguiente compara cómo se han recibido, procesado y consumido tradicionalmente los datos de entidades con la forma en que se reciben y se transmiten los datos en tiempo real con los servicios de transmisión.
Como puede ver en la ilustración, antes de la incorporación de los servicios de transmisión, los datos en tiempo real tenía que residir primero en una clase de entidad, lo que implicaba la presencia de una geodatabase corporativa. Las aplicaciones cliente que querían mostrar los datos tenían que sondear periódicamente el servicio de entidades para obtener las entidades nuevas y actualizadas.
La parte inferior de la ilustración muestra cómo permiten los servicios de transmisión que los datos en tiempo real se reciban y se envíen inmediatamente a los clientes a través de un WebSocket.
Consulte el tutorial sobre los servicios de transmisión disponibles en Tutoriales de GeoEvent Server para obtener más información sobre cómo trabajar con servicios de transmisión en GeoEvent Server.
Publicar un servicio de transmisión
Los servicios de transmisión se crean y publican en GeoEvent Manager como parte del flujo de trabajo para configurar un conector de salida Enviar entidades a un servicio de transmisión.
Al configurar un conector de salida Enviar entidades a un servicio de transmisión, se recomienda usar la conexión de ArcGIS Server o Portal for ArcGIS registrado como Predeterminado en GeoEvent Server.
Como alternativa, si tiene GeoEvent Server instalado y con licencia en un segundo equipo de servidor, puede registrar una conexión de data store a ese segundo equipo en GeoEvent Manager y especificar que el servicio de transmisión se publique en este segundo equipo. De esta forma, puede configurar una salida que se ejecuta en una máquina para difundir sus registros de entidades a través de un servicio de transmisión que se ejecuta en otra máquina.
Un conector de salida Enviar entidades a un servicio de transmisión configurado y ejecutado como una instancia de GeoEvent Server se debe incorporar a un servicio de GeoEvent configurado y ejecutado en el mismo GeoEvent Server.
Servicios de transmisión en el directorio de servicios REST de ArcGIS
Los servicios de transmisión se muestran en el directorio de servicios REST de ArcGIS, como cualquier otro servicio de ArcGIS Server. Los usuarios pueden hacer clic para revisar las propiedades de un servicio de transmisión. En la parte inferior de la página del servicio de transmisión, en el Directorio de servicios REST de ArcGIS, hay vínculos para transmitir y suscribirse a los datos de eventos con el fin de recibir los datos de eventos de un servicio de transmisión.
Haga clic en Transmitir para abrir una página web en la que puede introducir una representación JSON de entidades de Esri de una o varias entidades, y enviar las entidades a clientes conectados a un servicio de transmisión.
Haga clic en Suscribir para abrir una página web desde la que puede establecer conexión con un servicio de transmisión para ver las entidades que se están transmitiendo. Si tiene una transmisión de datos de gran volumen, el formulario de esta página se puede sobrecargar con rapidez. Utilice esta página durante periodos cortos de tiempo y únicamente para confirmar que los clientes que se han suscrito a un servicio de transmisión deben recibir los datos.
Consulte Servicios de transmisión para obtener más información sobre los servicios de transmisión en el Directorio de servicios REST de ArcGIS.
Consumir un servicio de transmisión
En la ilustración situada sobre la página REST del servicio de transmisión, puede ver un vínculo en la parte superior que permite ver el contenido de un servicio de transmisión en un mapa de ArcGIS JavaScript, una opción que está disponible normalmente para los servicios de mapas.
Haga clic en ArcGIS JavaScript para generar una página HTML al vuelo (“on the fly”) desde la que podrá visualizar los datos transmitidos por un servicio de transmisión.
Si hace clic con el botón derecho en ArcGIS JavaScript y hace clic en Ver código fuente, puede revisar el código de JavaScript. Los desarrolladores pueden usar y personalizar este código para crear aplicaciones web que consuman servicios de transmisión.
Los servicios de transmisión también se pueden consumir incorporándolos a un mapa web y a ArcGIS Pro.
Consulte Capas de transmisión para obtener más información sobre el consumo de servicios de transmisión en ArcGIS Pro.
Filtrar un servicio de transmisión
El servicio de transmisión permite filtrar por clientes. Cada cliente puede solicitar que se aplique un filtro a los datos antes de enviarlos desde el servicio de transmisión. Este filtro no afectará a los datos que fluyen hacia cualquiera de los otros clientes. El filtro se puede especificar en el momento de realizar la conexión o cuando esta ya se ha establecido.
Estos y otros ajustes se pueden aplicar en el momento de establecer la conexión abriendo una conexión de WebSocket.
Definir una referencia espacial para la transmisión de datos
Un servicio de transmisión tiene una referencia espacial predeterminada que se puede encontrar en la página de descripción del servicio en ArcGIS Server Manager. Si el cliente desea recibir los datos en una referencia espacial distinta de la predeterminada, debe definirlo en el momento de la conexión. Una vez que se haya definido la referencia espacial, no se podrá cambiar mientras dure la conexión. Será necesario crear una nueva conexión de WebSocket para cambiar la referencia espacial. Para invalidar una referencia espacial predeterminada, se debe usar la palabra clave outSR y conocer el Id. (WKID) de la referencia espacial que desee, y se debe agregar outSR=<WKID> a la dirección URL. Por ejemplo, para definir el ajuste predeterminado en WGS 1984 Web Mercator (Esfera auxiliar), cuyo WKID es 3857, agregue outSR=3857 a la dirección URL, como en: ws://HOSTNAME:6180/arcgis/services/Vehicles/StreamService/0/subscribe?outSR=3857
Configurar el filtro
El filtro de un servicio de transmisión puede incluir un componente espacial, un componente de consulta de tipo SQL y un componente outFields. Estos elementos se pueden definir y borrar por separado, con lo que en un momento dado pueden estar en efecto todos, algunos o ninguno de ellos. Para definir una parte del filtro, solo tiene que especificar esa parte y dejar fuera el resto. Las otras partes del filtro no se modificarán.
Filtro de geometría
La parte de geometría del filtro coincide con la estructura de los Objetos de geometría JSON devueltos por la API REST de ArcGIS. Para mantener el rendimiento del servicio de transmisión, solo se aceptan sobres como tipo de geometría.
El filtro puede incluir también una relación espacial identificada por la palabra clave spatialRel. Representa la relación espacial que se aplicará en la geometría de entrada mientras se realiza la consulta. La única relación espacial admitida es la intersección, que es el ajuste predeterminado (esriSpatialRelIntersects).
Se da por hecho que el filtro de geometría está en la misma referencia espacial que la conexión, que solo se puede invalidar en el momento de la conexión. Si se especifica una referencia espacial diferente como parte de la geometría, el sobre se proyecta en la referencia espacial de la conexión para usarlo cuando se filtren entidades de la transmisión de datos.
Filtro where
El filtro where es una expresión de tipo SQL que filtra las entidades de la transmisión de datos comprobando si sus atributos coinciden con la cláusula Where especificada. La expresión debe ser un valor de cadena de caracteres JSON entre comillas. Las operaciones admitidas son, entre otras, AND, OR, NOT, =, !=, <, <=, >, >=, IS NULL, IS NOT NULL, IN y LIKE. Se pueden realizar comparaciones entre un campo y un valor literal como ( 'field1 > 1' ) o entre dos campos del mismo tipo, como ( 'field1 > field2' ). Se pueden agregar paréntesis para garantizar que se aplica explícitamente la prioridad.
- Comparación numérica: ejemplo que compara un campo (Altitud) con un valor numérico: "Altitude < 1000".
- Comparación de campos: ejemplo que compara dos campos: "speed > maxSpeed".
- Comparación de cadena de caracteres: también se pueden comparar las cadenas de caracteres. Las comparaciones siempre distinguen entre minúsculas y mayúsculas, y los valores literales se deben escribir entre comillas simples. Por ejemplo: "Departure_Airport='KZSE'".
- Instrucciones LIKE: las cadenas de caracteres se pueden comparar usando la instrucción LIKE con el fin de utilizar comodines. El signo de porcentaje (%) es cualquier número de caracteres y el subrayado (_) puede ser cualquier carácter simple. El siguiente ejemplo aceptará personas en cuyos nombres el segundo y el tercer carácter coincidan con los de nombres como Samantha y James: "name LIKE '_am%'".
- Instrucciones IN: la instrucción IN permite especificar listas de valores literales. Si el campo coincide con cualquier valor de la lista, la entidad se proporciona en la transmisión.
- El siguiente ejemplo muestra una lista de cadenas de caracteres: "name IN ('Bob','Jane','Henry')".
- El siguiente ejemplo muestra una instrucción IN con una lista de valores numéricos: "alertCode IN (404,500,505)".
- También es posible usar un campo booleano en lugar de una expresión booleana. Por ejemplo, si las entidades contienen un campo denominado active de tipo booleano, puede escribir una cláusula WHERE que suministrará las entidades en las que el campo active se haya definido como true, por ejemplo: "active".
Filtro outFields
Los campos de la transmisión de datos se pueden filtrar por separado usando el filtro outFields identificado con la palabra clave outFields. Los campos deseados se definen usando una lista separada por comas de nombres de campos.