Compartir vía


Tutorial: Publicación y suscripción de mensajes mediante la API de WebSocket y el SDK del servicio Azure Web PubSub

El servicio Azure Web PubSub le ayuda a crear fácilmente aplicaciones de mensajería web en tiempo real. En este tutorial, aprenderá a suscribirse al servicio utilizando la API WebSocket y a publicar mensajes utilizando el SDK del servicio Web PubSub.

En este tutorial, aprenderá a:

  • Crear una instancia del servicio Web PubSub
  • Generar la dirección URL completa para establecer la conexión de WebSocket.
  • Crear un cliente suscriptor Web PubSub para recibir mensajes mediante el protocolo estándar WebSocket
  • Crear un cliente editor Web PubSub para publicar mensajes utilizando el SDK del servicio Web PubSub

Requisitos previos

  • Una suscripción de Azure, cree una cuenta gratuita.
  • Un shell de comandos de Bash. Use un shell local o el entorno de Bash en Azure Cloud Shell.
  • Si se ejecuta en su máquina local, instale la CLI de Azure.

Puede usar el shell de comandos de Windows cmd.exe en lugar de un shell de Bash para ejecutar los comandos de este tutorial.

Si está creando el proyecto en una máquina local, necesita instalar las dependencias para el idioma que está utilizando:

Importante

Las cadenas de conexión sin procesar solo aparecen en este artículo con fines de demostración.

Una cadena de conexión incluye la información de autorización necesaria para que la aplicación acceda al servicio Azure Web PubSub. La clave de acceso dentro de la cadena de conexión es similar a una contraseña raíz para el servicio. En entornos de producción, proteja siempre las claves de acceso. Use Azure Key Vault para administrar y rotar las claves de forma segura y proteja la conexión con WebPubSubServiceClient.

Evite distribuirlas a otros usuarios, codificarlas de forma rígida o guardarlas en un archivo de texto sin formato al que puedan acceder otros usuarios. Rote sus claves si cree que se han puesto en peligro.

Preparación del entorno

Configuración de la CLI de Azure para el desarrollo local

Siga estos pasos para configurar la CLI de Azure y el entorno del proyecto.

  1. Abra un shell de comandos.

  2. Actualice a la última versión de la CLI de Azure.

    az upgrade
    
  3. Instale la extensión para Web PubSub de la CLI de Azure.

    az extension add --name webpubsub
    
  4. Inicie sesión en la CLI de Azure. Siguiendo las indicaciones, escriba sus credenciales de Azure.

    az login
    

Crear un grupo de recursos

Un grupo de recursos es un contenedor lógico en el que se implementan y se administran los recursos de Azure. Use el comando az group create para crear un grupo de recursos denominado myResourceGroup en la ubicación eastus.

az group create --name myResourceGroup --location EastUS

1. Creación de una instancia de Azure Web PubSub

Creación de una instancia de Web PubSub

Para crear una instancia Web PubSub en el grupo de recursos creado, utilice el comando az webpubsub create de la CLI de Azure. El comando siguiente crea un recurso Free de Web PubSub en el grupo de recursos myResourceGroup en EastUS:

Cada recurso de Web PubSub debe tener un nombre único. Reemplace <su-nombre-de-recurso-único> por el nombre de la instancia de Web PubSub en el comando siguiente.

az webpubsub create --resource-group myResourceGroup --name <your-unique-resource-name> --location EastUS --sku Free_F1

La salida de este comando muestra las propiedades del recurso que acaba de crear. Tome nota de las siguientes propiedades:

  • name: nombre de Web PubSub que proporcionó en el parámetro --name anterior.
  • hostName: en el ejemplo, el nombre de host es <your-unique-resource-name>.webpubsub.azure.com/.

En este momento, su cuenta de Azure es la única autorizada para realizar operaciones en este nuevo recurso.

Obtención de la cadena de conexión

Use el comando az webpubsub key de la CLI de Azure para obtener el valor de ConnectionString del servicio. Reemplace el marcador de posición <your-unique-resource-name> por el nombre de la instancia de Azure Web PubSub.

az webpubsub key show --resource-group myResourceGroup --name <your-unique-resource-name> --query primaryConnectionString --output tsv

Copie la cadena de conexión para usarla más adelante.

Creación de un cliente de suscriptor

Los clientes se conectan al servicio Azure Web PubSub mediante el protocolo WebSocket estándar con el uso de la autenticación de JSON Web Token (JWT). El SDK del servicio proporciona métodos de asistencia para generar el token. En este tutorial, el suscriptor genera directamente el token de ConnectionString. En las aplicaciones reales, normalmente se usa una aplicación del lado del servidor para controlar el flujo de trabajo de autenticación o autorización. Para comprender mejor el flujo de trabajo, vea el tutorial Compilación de una aplicación de chat.

Las cadenas de conexión sin procesar solo aparecen en este artículo con fines de demostración. En entornos de producción, proteja siempre las claves de acceso. Use Azure Key Vault para administrar y rotar las claves de forma segura y proteja la conexión con WebPubSubServiceClient.

  1. En primer lugar, cree un directorio denominado subscriber para este proyecto e instale las dependencias requeridas:

    • El paquete Websocket.Client es un paquete de terceros que admite las conexiones de WebSocket. Puede usar cualquier API o biblioteca que admita WebSocket.
    • El paquete del SDK Azure.Messaging.WebPubSub ayuda a generar el token JWT.
    mkdir subscriber
    cd subscriber
    dotnet new console
    dotnet add package Websocket.Client --version 4.3.30
    dotnet add package Azure.Messaging.WebPubSub --version 1.0.0
    
  2. Reemplace el código en el Program.cs con el siguiente código que se conecta al servicio:

    using System;
    using System.Threading.Tasks;
    
    using Azure.Messaging.WebPubSub;
    
    using Websocket.Client;
    
    namespace subscriber
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                if (args.Length != 2)
                {
                    Console.WriteLine("Usage: subscriber <connectionString> <hub>");
                    return;
                }
                var connectionString = args[0];
                var hub = args[1];
    
                // Either generate the URL or fetch it from server or fetch a temp one from the portal
                var serviceClient = new WebPubSubServiceClient(connectionString, hub);
                var url = serviceClient.GetClientAccessUri();
    
                using (var client = new WebsocketClient(url))
                {
                    // Disable the auto disconnect and reconnect because the sample would like the client to stay online even no data comes in
                    client.ReconnectTimeout = null;
                    client.MessageReceived.Subscribe(msg => Console.WriteLine($"Message received: {msg}"));
                    await client.Start();
                    Console.WriteLine("Connected.");
                    Console.Read();
                }
            }
        }
    }
    
    

    El código crea una conexión de WebSocket que se conecta a un centro en Web PubSub. Un centro es una unidad lógica de Web PubSub donde puede publicar mensajes para un grupo de clientes. Los conceptos clave contienen una explicación detallada sobre los términos usados en Web PubSub.

    El servicio Web PubSub usa la autenticación JSON Web Token (JWT). El código de ejemplo usa WebPubSubServiceClient.GetClientAccessUri() en el SDK de Web PubSub para generar una dirección URL al servicio que contiene la dirección URL completa con un token de acceso válido.

    Una vez establecida la conexión, el cliente recibe mensajes a través de la conexión de WebSocket. El cliente usa client.MessageReceived.Subscribe(msg => ...)); para escuchar los mensajes entrantes.

  3. Para iniciar el suscriptor, ejecute el comando siguiente después de reemplazar <Web-PubSub-connection-string> por la cadena de conexión que copió anteriormente:

    dotnet run <Web-PubSub-connection-string> "myHub1"
    

2. Publicación de mensajes mediante el SDK del servicio

Cree un publicador con el SDK de Azure Web PubSub para publicar un mensaje para el cliente conectado. Para este proyecto, es necesario abrir otro shell de comandos.

  1. En primer lugar, cree un directorio del proyecto denominado publisher e instale las dependencias requeridas:

    mkdir publisher
    cd publisher
    dotnet new console
    dotnet add package Azure.Messaging.WebPubSub
    
  2. Actualice el archivo Program.cs para usar la clase WebPubSubServiceClient y enviar mensajes a los clientes.

    using System;
    using System.Threading.Tasks;
    using Azure.Messaging.WebPubSub;
    
    namespace publisher
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                if (args.Length != 3) {
                    Console.WriteLine("Usage: publisher <connectionString> <hub> <message>");
                    return;
                }
                var connectionString = args[0];
                var hub = args[1];
                var message = args[2];
    
                // Either generate the token or fetch it from server or fetch a temp one from the portal
                var serviceClient = new WebPubSubServiceClient(connectionString, hub);
                await serviceClient.SendToAllAsync(message);
            }
        }
    }
    
    

    La llamada SendToAllAsync() simplemente envía un mensaje a todos los clientes conectados en el centro.

  3. Envíe un mensaje mediante la ejecución del siguiente comando. Reemplace <Web-PubSub-connection-string> por la cadena de conexión que copió anteriormente.

    dotnet run <Web-PubSub-connection-string> "myHub1" "Hello World"
    
  4. Compruebe que el intérprete de comandos del abonado recibe el mensaje:

    Message received: Hello World
    

Limpieza

Puede eliminar los recursos que creó en este inicio rápido mediante la eliminación del grupo de recursos que los contiene.

az group delete --name myResourceGroup --yes

Si no tiene previsto seguir usando Azure Cloud Shell, puede eliminar el grupo de recursos que contiene la cuenta de almacenamiento asociada para evitar acumular costos. El grupo de recursos se denomina cloud-shell-storage-<your-region>. Ejecute el comando siguiente y reemplace <CloudShellResourceGroup> por el nombre del grupo de Cloud Shell.

az group delete --name <CloudShellResourceGroup> --yes

Precaución

Al eliminarse los grupos de recursos se eliminarán todos los recursos, incluidos aquellos creados fuera del ámbito de este tutorial.

Pasos siguientes

En este tutorial se proporciona una idea básica de cómo conectarse al servicio Web PubSub y cómo publicar mensajes en los clientes conectados.

En otros tutoriales podrá profundizar más en cómo usar el servicio.