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. Se ha comprobado que la latencia introducida mediante el almacenamiento inicial de los datos de eventos en una capa de entidades de una geodatabase corporativa para que los clientes puedan sondear periódicamente un servicio de entidades a fin de recuperar los datos para su visualización resulta problemática, especialmente al trabajar 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. Se recomienda utilizar un servicio de transmisión, un tipo de servicio ArcGIS Server.
Introducción sobre los servicios de transmisión
El servicio de transmisión facilita la diseminación de datos en tiempo real con baja latencia para 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. El contenido del servicio de transmisión se puede incorporar a los mapas web de ArcGIS Online y Portal for ArcGIS, ArcGIS Pro, así como exponerse mediante clientes desarrollados con ArcGIS Maps SDK for JavaScript.
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, puede 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.
Observe en la parte superior de la ilustración cómo los datos en tiempo real, antes de los servicios de transmisión, debían estar primero en una clase de entidad, que requería una geodatabase corporativa. Para mostrar los datos, las aplicaciones cliente 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 disponible en Tutoriales de GeoEvent Server para obtener más información sobre cómo trabajar con servicios de transmisión en GeoEvent Server.
Publicación del 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 registrada como Predeterminado en GeoEvent Server.
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. Revise las propiedades de un servicio de transmisión y utilice los controles para transmitir datos de eventos y suscribirse para recibir datos de eventos de un servicio de transmisión.
- Al hacer clic en Transmitir se 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.
- Al hacer clic en Suscribir se abrirá una página web desde la que puede establecer la 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 reciben los datos.
Consulte Servicios de transmisión para obtener más información sobre los servicios de transmisión en API REST de ArcGIS.
Consumir un servicio de transmisión
Desde la página de propiedades del servicio de transmisión en el Directorio de servicios REST de ArcGIS, haga clic en ArcGIS JavaScript para generar una página HTML al vuelo desde la que puede visualizar los datos que transmite un servicio de transmisión.
Haga clic con el botón derecho en ArcGIS JavaScript y haga clic en Ver código fuente para 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
Un 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. Es posible especificar el filtro cuando se realiza la conexión o tras establecerla.
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 encuentra 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. Se debe crear una nueva conexión de WebSocket para cambiar la referencia espacial. Para invalidar una referencia espacial predeterminada, utilice la palabra clave outSR, conozca el Id. conocido (WKID) de la referencia espacial deseada y agregue outSR=<WKID> a la URL. Por ejemplo, para definir la referencia espacial predeterminada en WGS 1984 Web Mercator (Auxiliary Sphere), cuyo WKID es 3857, agregue outSR=3857 a la URL, como 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, especifique esa parte y deje 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 también puede incluir 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 intersects (esriSpatialRelIntersects), que es el valor predeterminado.
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 (Altitude) 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 distinguen entre minúsculas y mayúsculas, y los valores literales se deben escribir entre comillas simples: "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á nombres que tengan las letras mm como segundo y tercer carácter, como en el caso de 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 puede 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 mediante el filtro outFields identificado con la palabra clave outFields. Los campos deseados se definen usando una lista separada por comas de nombres de campos.