¿Qué es ASP.NET Core SignalR?
Todas las aplicaciones conectadas a Internet se componen de servidores y clientes. Los clientes dependen de los servidores para recibir datos y el mecanismo principal para ello es mediante la realización de solicitudes del Protocolo de transferencia de hipertexto (HTTP). Algunas aplicaciones cliente requieren datos que cambian con frecuencia.
ASP.NET Core SignalR proporciona una API para crear llamadas a procedimiento remoto (RPC) de servidor a cliente. Las RPC invocan funciones en los clientes desde el código de .NET Core del lado servidor. Hay varias plataformas compatibles, cada una con su propio SDK de cliente. Por lo tanto, el lenguaje de programación que invocan las llamadas de procedimiento remoto puede variar.
Resulta útil familiarizarse con la terminología común asociada a SignalR. En esta unidad, aprenderá qué componentes de SignalR son necesarios en una aplicación de servidor frente a los de las aplicaciones cliente. Además, comprenderá los distintos mecanismos de comunicación dúplex. SignalR encapsula varios protocolos en tiempo real y abstrae las complejidades de cada implementación. Para más información, consulte la documentación de ASP.NET Core SignalR.
Los términos principales que se usan en SignalR se abordan en las secciones siguientes.
Transportes
SignalR admite las técnicas siguientes (transportes) para controlar la comunicación en tiempo real:
- WebSockets
- Eventos enviados por el servidor
- Sondeo largo
El orden en el que se enumeran los transportes aquí indica su orden de reserva correcto. En otras palabras, WebSocket es preferible a los eventos enviados por el servidor y estos últimos son preferibles al sondeo largo, pero se podría usar cualquiera de estos transportes. SignalR elige automáticamente el mejor método de transporte que se encuentra dentro de las funcionalidades del servidor y el cliente. Para obtener más información, consulte las especificaciones oficiales de los protocolos de transporte de SignalR.
Servidor
El servidor es responsable de exponer un punto de conexión de SignalR. El punto de conexión se asigna a una subclase Hub o Hub<T>. El servidor puede existir de forma local, en un proveedor de nube (como Azure) o con Azure SignalR Service. El servidor expone los métodos del centro de conectividad, a los que se puede llamar desde los clientes, y los eventos a los que los clientes pueden suscribirse. Estos se consideran procedimientos remotos.
Hub
En SignalR, se usa un centro para la comunicación entre clientes y servidores. Un centro de conectividad es una canalización de alto nivel que permite que clientes y servidores llamen a los métodos del otro. Para ello, SignalR gestiona el envío entre los límites de la máquina automáticamente. Puede considerar un centro de conectividad como un proxy entre todos los clientes conectados y el servidor.
Protocolos
SignalR es un protocolo para RPC bidireccionales a través de cualquier transporte basado en mensajes. Cualquiera de las partes de la conexión puede invocar procedimientos en la otra parte y los procedimientos pueden devolver cero o más resultados o un error. SignalR proporciona dos protocolos de centro integrados:
- Un protocolo de texto basado en JSON, que es el valor predeterminado.
- Un protocolo binario basado en MessagePack, que generalmente crea mensajes más pequeños en comparación con JSON.
Para usar el protocolo MessagePack, tanto el servidor como el cliente deben participar en su configuración, y tanto el servidor como el cliente tienen que admitirlo. Existe un tercer protocolo de centro de conectividad llamado BlazorPack, pero se usa exclusivamente con aplicaciones Blazor-Server. No se puede usar sin el modelo de hospedaje de Blazor-Server. Para más información, consulte las especificaciones oficiales del protocolo de centro de SignalR.
Usuarios
Un usuario del sistema actúa como individuo, pero también puede formar parte de un grupo. Los mensajes se pueden enviar a grupos y se enviará una notificación a todos los miembros del grupo. Un solo usuario puede conectarse desde varias aplicaciones cliente. Por ejemplo, el mismo usuario puede usar un dispositivo móvil y un explorador web y obtener actualizaciones en tiempo real en ambos al mismo tiempo.
Grupos
Un grupo consta de una o varias conexiones. El servidor puede crear grupos, agregar conexiones a un grupo y quitar conexiones de un grupo. Un grupo tiene un nombre especificado, que actúa como su identificador único. Los grupos sirven como mecanismo de ámbito para ayudar a dirigir los mensajes. Es decir, la funcionalidad en tiempo real solo se puede enviar a los usuarios de un grupo con nombre.
Conexiones
Una conexión a un centro de conectividad se representa mediante un identificador único que solo conoce el servidor y el cliente. Existe una conexión única por cada tipo de centro. Cada cliente tiene una conexión única al servidor. Es decir, un solo usuario se puede representar en varios clientes, pero cada conexión cliente tiene su propio identificador.
Clientes
El cliente es responsable de establecer una conexión con el punto de conexión del servidor a través de un objeto HubConnection
. La conexión de centro se representa dentro de cada plataforma de destino:
- Cliente de .NET:
Microsoft.AspNetCore.SignalR.Client.HubConnection
- Cliente de JavaScript:
@microsoft/signalr.HubConnection
- Cliente de Java:
com.microsoft.signalr.HubConnection
Para obtener más información, vea los documentos sobre las plataformas admitidas de ASP.NET Core SignalR.
Cuando una instancia de conexión de centro de conectividad se inicia correctamente, los mensajes fluyen libremente en ambas direcciones. Los usuarios pueden comunicar notificaciones al servidor y recibir notificaciones de este. Un cliente es cualquier aplicación conectada, por ejemplo, un explorador web, una aplicación móvil o una aplicación de escritorio, entre otros.