Share via


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

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

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 PubSub Web per pubblicare messaggi con Web PubSub SERVICE SDK

Prerequisiti

  • Una sottoscrizione di Azure, creare un account gratuito.
  • Shell dei comandi Bash. Usare una shell locale o l'ambiente Bash in Azure Cloud Shell.
  • Se in esecuzione nel computer locale installare l'interfaccia della riga di comando di Azure.

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

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

Predisporre l'ambiente

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

Seguire questa procedura 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 alla versione più recente 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 istruzioni, 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 nel eastus percorso.

az group create --name myResourceGroup --location EastUS

1. Creare un'istanza di PubSub Web di Azure

Creare un'istanza di Web PubSub

Usare il comando az webpubsub create dell'interfaccia della riga di comando di Azure per creare un Web PubSub nel gruppo di risorse creato. Il comando seguente crea una risorsa PubSub Web gratuita nel gruppo myResourceGroup di risorse 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 due proprietà elencate di seguito:

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

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

Ottenere la stringa di connessione

Importante

Un stringa di connessione include le informazioni di autorizzazione necessarie per l'applicazione per accedere al servizio Web PubSub di Azure. La chiave di accesso all'interno del stringa di connessione è simile a una password radice per il servizio. Negli ambienti di produzione, prestare sempre attenzione a proteggere le chiavi di accesso. Usare Azure Key Vault per gestire e ruotare le chiavi in modo sicuro. Evitare di distribuire chiavi di accesso ad altri utenti, hardcodedarli o salvarli in qualsiasi punto del testo normale accessibile ad altri utenti. Ruotare le chiavi se si ritiene che siano state compromesse.

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

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

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

Creare un client sottoscrittore

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

  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 terze parti che supporta le connessioni WebSocket. È possibile usare qualsiasi API/libreria che supporti WebSocket.
    • Il pacchetto Azure.Messaging.WebPubSub SDK 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 connetterà 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. I concetti chiave contengono la spiegazione dettagliata dei termini usati in Web PubSub.

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

    Dopo aver stabilito la connessione, il client riceve i messaggi tramite la connessione WebSocket. Il client usa per restare in ascolto client.MessageReceived.Subscribe(msg => ...)); dei messaggi in arrivo.

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

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

2. Pubblicare messaggi con l'SDK del servizio

Creare un server di pubblicazione usando Azure Web PubSub SDK 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 e installare le dipendenze necessarie:

    mkdir publisher
    cd publisher
    dotnet new console
    dotnet add package Azure.Messaging.WebPubSub
    
  2. Aggiornare il Program.cs file per usare la WebPubSubServiceClient classe 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 SendToAllAsync() chiamata invia semplicemente un messaggio a tutti i client connessi nell'hub.

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

    dotnet run <Web-PubSub-connection-string> "myHub1" "Hello World"
    
  4. Controllare la shell dei comandi del sottoscrittore per verificare che abbia ricevuto il messaggio:

    Message received: Hello World
    

Pulizia

È possibile eliminare le risorse create in questa guida introduttiva eliminando il gruppo di risorse che li 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>. Eseguire il comando seguente, sostituendo <CloudShellResourceGroup> con il nome del gruppo di Cloud Shell.

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

Attenzione

L'eliminazione di 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.

Vedere altre esercitazioni per approfondire come usare il servizio.