Aspectos internos de Azure SignalR Service

Azure SignalR Service se basa en el marco de ASP.NET Core SignalR. También admite SignalR para ASP.NET, ya que vuelve a implementar el protocolo de datos de SignalR para ASP.NET sobre el marco de ASP.NET Core.

Puede migrar fácilmente una ASP.NET Core SignalR local o una aplicación de ASP.NET SignalR para trabajar con SignalR Service, con el cambio de pocas líneas de código.

En el diagrama se describe la arquitectura típica cuando se usa SignalR Service con el servidor de aplicaciones.

También se habla de las diferencias de la aplicación de SignalR para ASP.NET Core autohospedada.

Architecture

Conexiones de servidor de aplicaciones

Un servidor de aplicaciones de ASP.NET Core SignalR autohospedado escucha y conecta clientes directamente.

Con SignalR Service, el servidor de aplicaciones ya no acepta conexiones de cliente persistentes, en su lugar:

  1. El SDK de Azure SignalR Service expone un punto de conexión negotiate para cada centro de conectividad.
  2. El punto de conexión responde a las solicitudes de negociación de cliente y redirige a los clientes a SignalR Service.
  3. Los clientes se conectan a SignalR Service.

Para más información, consulte Client connections (Conexiones con el cliente).

Una vez iniciado el servidor de aplicaciones:

  • Para ASP.NET Core SignalR: el SDK de Azure SignalR Service abre cinco conexiones webSocket por centro a SignalR Service.
  • Para ASP.NET SignalR: el SDK de Azure SignalR Service abre cinco conexiones webSocket por centro a SignalR Service y una por conexión webSocket de aplicación.

El número inicial de conexiones tiene como valor predeterminado 5 y se puede configurar mediante la InitialHubServerConnectionCount opción en el SDK de SignalR Service. Para obtener más información, consulte configuración.

Aunque el servidor de aplicaciones está conectado al servicio SignalR, el servicio Azure SignalR puede enviar mensajes de equilibrio de carga al servidor. A continuación, el SDK inicia nuevas conexiones de servidor al servicio para mejorar el rendimiento. Los mensajes hacia y desde los clientes se multiplexan en estas conexiones.

Las conexiones de servidor se conectan de forma persistente a SignalR Service. Si se desconecta una conexión de servidor debido a un problema de red:

Conexiones de cliente

Cuando se usa SignalR Service, los clientes se conectan al servicio en lugar del servidor de aplicaciones. Hay tres pasos para establecer conexiones persistentes entre el cliente y SignalR Service.

  1. Un cliente envía una solicitud de negociación al servidor de aplicaciones.

  2. El servidor de aplicaciones usa el SDK de Azure SignalR Service para devolver una respuesta de redirección que contiene la dirección URL de SignalR Service y el token de acceso.

    • Para ASP.NET Core SignalR, una respuesta de redirección típica es similar a la siguiente:
      {
          "url":"https://test.service.signalr.net/client/?hub=chat&...",
          "accessToken":"<a typical JWT token>"
      }
      
    • Para ASP.NET SignalR, una respuesta de redirección típica es similar a la siguiente:
      {
          "ProtocolVersion":"2.0",
          "RedirectUrl":"https://test.service.signalr.net/aspnetclient",
          "AccessToken":"<a typical JWT token>"
      }
      
  3. Una vez que el cliente recibe la respuesta de redirección, usa la dirección URL y el token de acceso para conectarse a SignalR Service.

Para obtener más información sobre ASP.NET Core SignalR, consulte Protocolos de transporte.

Transmisión de datos entre el cliente y el servidor

Cuando un cliente está conectado a SignalR Service, el tiempo de ejecución del servicio busca una conexión de servidor para atender a este cliente.

  • Este paso solo se produce una vez y es una asignación uno a uno entre el cliente y la conexión de servidor.
  • La asignación se mantiene en SignalR Service hasta que el cliente o el servidor se desconecta.

En este momento, el servidor de aplicaciones recibe un evento con información del nuevo cliente. Se crea una conexión lógica al con el cliente en el servidor de aplicaciones. Se establece el canal de datos desde el cliente al servidor de aplicaciones a través de SignalR Service.

SignalR Service transmite datos desde el cliente al servidor de aplicaciones de emparejamiento. Los datos del servidor de aplicaciones se envían a los clientes asignados.

SignalR Service no guarda ni almacena los datos de los clientes, todos los datos de cliente recibidos se transmiten al servidor de destino o a los clientes en tiempo real.

Azure SignalR Service actúa como una capa de transporte lógica entre el servidor de aplicaciones y los clientes. Todas las conexiones persistentes se descargan en SignalR Service. Como resultado, el servidor de aplicaciones solo necesita controlar la lógica de negocios en la clase de concentrador, sin preocuparse por las conexiones de cliente.

Pasos siguientes

Para más información sobre los SDK de Azure SignalR, consulte: