Modo de servicio en Azure SignalR Service

El modo de servicio es un concepto importante en Azure SignalR Service. SignalR Service admite actualmente tres modos de servicio: predeterminado, sin servidor y clásico. El recurso SignalR Service se comportará de forma diferente en cada modo. En este artículo, aprenderá sus diferencias y cómo elegir el modo de servicio adecuado en función de su escenario.

Establecimiento del modo de servicio

Se le pedirá que especifique un modo de servicio al crear un nuevo recurso de SignalR en el Azure Portal.

Azure portal – Choose service mode when creating a SignalR Service

También puede cambiar el modo de servicio más adelante en el menú de configuración.

Update service mode

Use az signalr create y az signalr update para establecer o cambiar el modo de servicio mediante la CLI de Azure SignalR.

Modo predeterminado

Como su nombre indica, el modo predeterminado es el modo de servicio predeterminado para SignalR Service. En el modo predeterminado, la aplicación funciona como una aplicación típica ASP.NET Core SignalR o ASP.NET SignalR (en desuso). Tiene una aplicación de servidor web que hospeda un centro, denominado servidor concentrador, y los clientes tienen comunicación dúplex completa con el servidor concentrador. La diferencia es queASP.NET Core SignalR y Azure SignalR Service en lugar de conectar directamente el cliente y el servidor, ambos se conectan al SignalR Service y usan el servicio como proxy. En el diagrama siguiente se muestra la estructura típica de la aplicación en modo predeterminado.

Application structure in Default mode

El modo predeterminado suele ser la opción adecuada cuando tiene una aplicación signalR que desea usar con SignalR Service.

Enrutamiento de conexión en modo predeterminado

En el modo predeterminado, hay conexiones de WebSocket entre el servidor concentrador y SignalR Service llamadas conexiones de servidor. Estas conexiones se utilizan para transferir mensajes entre un servidor y el cliente. Cuando se conecte un nuevo cliente, el SignalR Service lo enrutará a un servidor concentrador (suponiendo que tenga más de un servidor) mediante las conexiones de servidor existentes. La conexión de cliente se adherirá al mismo servidor concentrador durante su vigencia. Esta propiedad se conoce como permanencia de conexión. Cuando el cliente envía mensajes, siempre se dirigen al mismo servidor concentrador. Con este comportamiento, puede mantener de forma segura algunos estados para las conexiones individuales en el servidor concentrador. Por ejemplo, si quiere transmitir algo entre el servidor y el cliente, no es necesario considerar el caso en que los paquetes de datos vayan a servidores diferentes.

Importante

En el modo predeterminado, un cliente no puede conectarse sin que un servidor concentrador se conecte primero al servicio. Si todos los servidores concentradores se desconectan debido a una interrupción de la red o al reinicio del servidor, la conexión de cliente recibirá un error que indica que no hay ningún servidor conectado. Es su responsabilidad asegurarse de que siempre haya al menos un servidor concentrador conectado al SignalR service. Por ejemplo, puede diseñar la aplicación con varios servidores concentradores y, a continuación, asegurarse de que no se desconectarán al mismo tiempo.

Este modelo de enrutamiento predeterminado también significa que, cuando un servidor concentrador se queda sin conexión, las conexiones enrutadas a ese servidor se anularán. Debe esperar que las conexiones se anulen cuando el servidor concentrador esté sin conexión para el mantenimiento y controlar la reconexión para minimizar los efectos de la aplicación.

Nota:

En el modo predeterminado, también puede usar el enlace de función, el SDK de administración o la API de REST para enviar mensajes directamente al cliente si no quiere pasar por el servidor concentrador. En el modo predeterminado, las conexiones de cliente siguen siendo administradas por servidores concentradores y el punto de conexión ascendente no funcionará en ese modo.

Modo sin servidor

A diferencia del modo predeterminado, el modo sin servidor no requiere que se ejecute un servidor concentrador, por lo que este modo se denomina "sin servidor". El SignalR Service es responsable de mantener las conexiones de cliente. No hay ninguna garantía de permanencia de conexión y las solicitudes HTTP pueden ser menos eficientes que las conexiones de WebSocket.

El modo sin servidor funciona con Azure Functions para proporcionar funcionalidad de mensajería en tiempo real. Los clientes trabajan con enlaces de SignalR Service para Azure Functions, denominados enlaces de función, para enviar mensajes como enlace de salida.

Dado que no hay conexión de servidor, si intenta usar un SDK de servidor para establecer una conexión de servidor, obtendrá un error. SignalR Service rechazará los intentos de conexión del servidor en modo sin servidor.

El modo sin servidor no tiene permanencia en la conexión, pero todavía puede tener mensajes de inserción de aplicaciones del lado servidor a los clientes. Hay dos maneras de insertar mensajes a los clientes en modo sin servidor:

  • Uso de la API de REST para un evento de envío único o
  • Use una conexión WebSocket para poder enviar varios mensajes de forma más eficaz. Esta conexión de WebSocket es diferente de una conexión de servidor.

Nota:

Tanto la opción API REST como WebSocket se admiten en el SDK de administración del SignalR service. Si utiliza un lenguaje distinto de .NET, también puede invocar manualmente las API REST que siguen a esta especificación.

También es posible que la aplicación de servidor reciba mensajes y eventos de conexión de los clientes. SignalR Service entregará mensajes y eventos de conexión a puntos de conexión preconfigurados (denominados puntos de conexión ascendentes) mediante webhooks. Los puntos de conexión ascendentes solo se pueden configurar en el modo sin servidor. Para obtener más información, vea Puntos de conexión ascendentes.

El diagrama siguiente muestra cómo funciona la aplicación de sin servidor.

Application structure in Serverless mode

Modo clásico

Nota:

El modo clásico es principalmente para la compatibilidad con versiones anteriores para las aplicaciones creadas antes de que se introdujeran los modos Predeterminado y Sin servidor. No use el modo clásico excepto como último recurso. Use Predeterminado o Sin servidor para las nuevas aplicaciones, en función de su escenario. Debe considerar la posibilidad de rediseñar las aplicaciones existentes para eliminar la necesidad del modo clásico.

El clásico es una combinación del modo predeterminado y el modo sin servidor. En este modo, el tipo de conexión se decide según si hay un servidor concentrador conectado cuando se establece la conexión de cliente. Si hay un servidor concentrador, la conexión de cliente se enrutará a él. Si un servidor concentrador no está disponible, la conexión de cliente se realizará en un modo sin servidor limitado en el que los mensajes de cliente a servidor no se pueden entregar a un servidor concentrador. Las conexiones sin servidor en modo clásico no admiten algunas características, como los puntos de conexión ascendentes.

Si todos los servidores concentradores están sin conexión por cualquier motivo, las conexiones se realizarán en modo sin servidor. Es su responsabilidad asegurarse de que, al menos, un servidor concentrador esté siempre disponible.

Selección del modo de servicio correcto

Ahora, debería comprender las diferencias entre los modos de servicio y saber cómo elegir entre ellos. Como se ha explicado anteriormente, no se recomienda el modo clásico para las aplicaciones nuevas o existentes. A continuación, se muestran algunas sugerencias que pueden ayudarle a tomar la decisión adecuada para el modo servidor y retirar el modo clásico para las aplicaciones existentes.

  • Elija el modo predeterminado si ya está familiarizado con el funcionamiento de la biblioteca de SignalR y quiere pasar de un servicio SignalR autohospedado a Azure SignalR Service. El modo predeterminado funciona exactamente igual que el servicio SignalR autohospedado, y puede usar el mismo modelo de programación en la biblioteca de SignalR. SignalR Service actúa como proxy entre clientes y servidores concentradores.

  • Elija el modo sin servidor si va a crear una aplicación y no quiere mantener las conexiones de servidor y de servidor concentrador. El modo sin servidor suele funcionar junto con Azure Functions, por lo que no es necesario mantener ningún servidor. Aunque puede seguir teniendo comunicaciones dúplex (con la API de REST, el SDK de administración o el enlace de función + punto de conexión ascendente), el modelo de programación será diferente de la biblioteca de SignalR.

  • Elija Modo predeterminado si tiene ambos servidores concentradores para atender las conexiones de cliente y una aplicación back-end para insertar mensajes directamente en los clientes. La diferencia principal entre el modo predeterminado y sin servidor radica en si tiene servidores concentradores y en cómo se enrutan las conexiones de cliente. La API REST, el SDK de administración y el enlace de función se pueden usar en ambos modos.

  • Si realmente tiene un escenario mixto, debe considerar la posibilidad de separar los casos de uso en varias instancias de SignalR Service con el modo de servicio establecido según el uso. Un ejemplo de un escenario mixto que requiere el modo clásico es donde tiene dos concentradores diferentes en el mismo recurso de SignalR. Un concentrador se usa como concentrador de SignalR tradicional y el otro concentrador se usa con Azure Functions. Este ejemplo debe dividirse en dos recursos con una instancia en modo predeterminado y otra en modo sin servidor.

Pasos siguientes

Consulte los artículos siguientes para obtener más información sobre cómo usar los modos Predeterminado y Sin servidor.