Condividi tramite


Esercitazione: Pubblicare e sottoscrivere messaggi usando l'API WebSocket e l'SDK del servizio Azure Web PubSub

Il servizio Azure Web PubSub consente di creare applicazioni messaggistica Web in tempo reale. In questa esercitazione, si apprenderà come sottoscrivere il servizio usando l'API WebSocket e pubblicare messaggi usando l'SDK del servizio Web PubSub.

In questa esercitazione apprenderai a:

  • Creare un'istanza del servizio Web PubSub
  • Generare l'URL completo per stabilire la connessione WebSocket
  • Creare un client sottoscrittore Web PubSub per ricevere messaggi usando il protocollo WebSocket standard
  • Creare un client di pubblicazione Web PubSub per pubblicare messaggi usando l'SDK del servizio Web PubSub

Prerequisiti

È possibile usare la shell dei comandi cmd.exe di Windows anziché una shell Bash per eseguire i comandi in questa esercitazione.

Se il progetto viene creato in un computer locale, è necessario installare le dipendenze per la lingua in uso:

Importante

Le stringa di connessione non elaborate vengono visualizzate in questo articolo solo a scopo dimostrativo.

Una stringa di connessione include le informazioni sull'autorizzazione necessarie all'applicazione per l'accesso al servizio Azure Web PubSub. La chiave di accesso all'interno della stringa di connessione è simile a una password radice per il servizio. Negli ambienti di produzione proteggere sempre le chiavi di accesso. Usare Azure Key Vault per gestire e ruotare le chiavi in modo sicuro e proteggere la connessione con WebPubSubServiceClient.

Evitare di distribuire le chiavi di accesso ad altri utenti, impostarle come hardcoded o salvarle in un file di testo normale accessibile ad altri. Ruotare le chiavi se si ritiene che siano state compromesse.

Predisporre l'ambiente

Configurazione dell'interfaccia della riga di comando di Azure per lo sviluppo locale

Seguire questi passaggi per configurare l'interfaccia della riga di comando di Azure e l'ambiente del progetto.

  1. Aprire una shell dei comandi.

  2. Eseguire l'aggiornamento all'ultima versione dell'interfaccia della riga di comando di Azure.

    az upgrade
    
  3. Installare l'estensione dell'interfaccia della riga di comando di Azure per Web PubSub.

    az extension add --name webpubsub
    
  4. Accedere all'interfaccia della riga di comando di Azure. Seguendo le richieste, immettere le credenziali di Azure.

    az login
    

Creare un gruppo di risorse

Un gruppo di risorse è un contenitore logico in cui vengono distribuite e gestite le risorse di Azure. Usare il comando az group create per creare un gruppo di risorse denominato myResourceGroup nella posizione eastus.

az group create --name myResourceGroup --location EastUS

1. Creare un'istanza di Azure Web PubSub

Creare un'istanza di Web PubSub

Per creare un'istanza Web PubSub nel gruppo di risorse creato, usare il comando az webpubsub create dell'interfaccia della riga di comando di Azure. Il comando seguente crea una risorsa Web PubSub gratuita nel gruppo di risorse myResourceGroup in EastUS:

Ogni risorsa Web PubSub deve avere un nome univoco. Sostituire <your-unique-resource-name> con il nome dell'istanza di Web PubSub nel comando seguente.

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

L'output di questo comando mostra le proprietà della risorsa appena creata. Prendere nota delle proprietà seguenti:

  • name: il nome Web PubSub specificato nel parametro --name precedente.
  • hostName: nell'esempio il nome è <your-unique-resource-name>.webpubsub.azure.com/.

A questo punto, l'account di Azure è l'unico autorizzato a eseguire qualsiasi operazione su questo nuova risorsa.

Ottenere la stringa di connessione

Usare il comando az webpubsub key dell'interfaccia della riga di comando di Azure per ottenere la ConnectionString del servizio. Sostituire il segnaposto <your-unique-resource-name> con il nome dell'istanza di Azure Web PubSub.

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

Copiare la stringa di connessione da usare in un secondo momento.

Creare un client sottoscrittore

I client si connettono al servizio Azure Web PubSub tramite il protocollo WebSocket standard usando l'autenticazione del token JSON Web (JWT). L'SDK del servizio fornisce metodi helper per generare il token. In questa esercitazione, il sottoscrittore genera direttamente il token da ConnectionString. Nelle applicazioni reali, un'applicazione lato server generalmente gestisce il flusso di lavoro di autenticazione/autorizzazione. Per comprendere meglio il flusso di lavoro, vedere l'esercitazione Creare un'app di chat.

Le stringa di connessione non elaborate vengono visualizzate in questo articolo solo a scopo dimostrativo. Negli ambienti di produzione proteggere sempre le chiavi di accesso. Usare Azure Key Vault per gestire e ruotare le chiavi in modo sicuro e proteggere la connessione con WebPubSubServiceClient.

  1. Creare prima di tutto una directory di progetto denominata subscriber per questo progetto e installare le dipendenze necessarie:

    • Il pacchetto Websocket.Client è un pacchetto di terzi che supporta connessioni WebSocket. È possibile usare qualsiasi API/libreria che supporti WebSocket.
    • Il pacchetto SDK Azure.Messaging.WebPubSub consente di generare il 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. Sostituire il codice in Program.cs con il codice seguente che si connette al servizio:

    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();
                }
            }
        }
    }
    
    

    Il codice crea una connessione WebSocket connessa a un hub in Web PubSub. Un hub è un'unità logica in Web PubSub in cui è possibile pubblicare messaggi in un gruppo di client. Concetti chiave contiene la spiegazione dettagliata dei termini usati in Web PubSub.

    Il servizio Web PubSub usa l'autenticazione del token JSON Web (JWT). Il codice di esempio usa WebPubSubServiceClient.GetClientAccessUri() nell'SDK Web PubSub per generare un URL al servizio che contiene l'URL completo con un token di accesso valido.

    Una volta stabilita la connessione, il client riceve i messaggi tramite la connessione WebSocket. Il client usa client.MessageReceived.Subscribe(msg => ...)); per attendere i messaggi in arrivo.

  3. Per avviare il sottoscrittore eseguire il programma seguente, sostituendo <Web-PubSub-connection-string> con la stringa di connessione copiata in precedenza:

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

2. Pubblicare messaggi con l'SDK del servizio

Creare un publisher usando l'SDK Azure Web PubSub per pubblicare un messaggio nel client connesso. Per questo progetto è necessario aprire un'altra shell dei comandi.

  1. Creare prima di tutto una directory di progetto denominata publisher progetto e installare le dipendenze necessarie:

    mkdir publisher
    cd publisher
    dotnet new console
    dotnet add package Azure.Messaging.WebPubSub
    
  2. Aggiornare il file Program.cs per usare la classe WebPubSubServiceClient e inviare messaggi ai client.

    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 chiamata SendToAllAsync() invia semplicemente un messaggio a tutti i client connessi nell'hub.

  3. Inviare un messaggio usando il comando seguente. Sostituire <Web-PubSub-connection-string> con la stringa di connessione copiata in precedenza.

    dotnet run <Web-PubSub-connection-string> "myHub1" "Hello World"
    
  4. Assicurarsi che la shell dei comandi del sottoscrittore riceva il messaggio:

    Message received: Hello World
    

Pulizia

È possibile eliminare le risorse create in questa guida introduttiva eliminando il gruppo di risorse che le contiene.

az group delete --name myResourceGroup --yes

Se non si prevede di continuare a usare Azure Cloud Shell, è possibile evitare di accumulare costi eliminando il gruppo di risorse che contiene l'account di archiviazione associato. Il gruppo di risorse è denominato cloud-shell-storage-<your-region>. Usare il comando seguente, sostituendo <CloudShellResourceGroup> con il nome del gruppo Cloud Shell.

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

Attenzione

L'eliminazione dei gruppi di risorse eliminerà tutte le risorse, incluse le risorse create all'esterno dell'ambito di questa esercitazione.

Passaggi successivi

Questa esercitazione offre un'idea di base su come connettersi al servizio Web PubSub e pubblicare messaggi ai client connessi.

Controllare altre esercitazioni per approfondire come usare il servizio.