Share via


Tutorial: Publicar e assinar mensagens usando a API WebSocket e o SDK do serviço Azure Web PubSub

O serviço Azure Web PubSub ajuda-o a criar facilmente aplicações de mensagens Web em tempo real. Neste tutorial, você aprenderá como assinar o serviço usando a API WebSocket e publicar mensagens usando o SDK do serviço Web PubSub.

Neste tutorial, irá aprender a:

  • Criar uma instância de serviço Web PubSub
  • Gere a URL completa para estabelecer a conexão WebSocket
  • Criar um cliente de assinante Web PubSub para receber mensagens usando o protocolo WebSocket padrão
  • Criar um cliente de editor Web PubSub para publicar mensagens usando o SDK do serviço Web PubSub

Pré-requisitos

  • Uma assinatura do Azure, crie uma conta gratuita.
  • Um shell de comando Bash. Use um shell local ou o ambiente Bash no Azure Cloud Shell.
  • Se estiver em execução na sua máquina local, instale a CLI do Azure.

Você pode usar o shell de comando do Windows cmd.exe em vez de um shell Bash para executar os comandos neste tutorial.

Se estiver criando o projeto em uma máquina local, você precisará instalar as dependências para o idioma que está usando:

Preparar o ambiente

Configuração da CLI do Azure para desenvolvimento local

Siga estas etapas para configurar a CLI do Azure e seu ambiente de projeto.

  1. Abra um shell de comando.

  2. Atualize para a versão mais recente da CLI do Azure.

    az upgrade
    
  3. Instale a extensão CLI do Azure para Web PubSub.

    az extension add --name webpubsub
    
  4. Iniciar sessão na CLI do Azure. Seguindo os prompts, insira suas credenciais do Azure.

    az login
    

Criar um grupo de recursos

Um grupo de recursos é um contentor lógico no qual os recursos do Azure são implementados e geridos. Use o comando az group create para criar um grupo de recursos nomeado myResourceGroup no eastus local.

az group create --name myResourceGroup --location EastUS

1. Criar uma instância do Azure Web PubSub

Criar uma instância do Web PubSub

Use o comando Azure CLI az webpubsub create para criar um Web PubSub no grupo de recursos que você criou. O comando a seguir cria um recurso Free Web PubSub no grupo myResourceGroup de recursos em EastUS:

Cada recurso Web PubSub deve ter um nome exclusivo. Substitua <your-unique-resource-name> pelo nome da instância do Web PubSub no comando a seguir.

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

A saída deste comando mostra as propriedades do recurso recém-criado. Tome nota das duas propriedades listadas abaixo:

  • name: O nome Web PubSub fornecido no --name parâmetro acima.
  • hostName: No exemplo, o nome do host é <your-unique-resource-name>.webpubsub.azure.com/.

Neste ponto, sua conta do Azure é a única autorizada a executar quaisquer operações neste novo recurso.

Obter a cadeia de ligação

Importante

Uma cadeia de conexão inclui as informações de autorização necessárias para seu aplicativo acessar o serviço Azure Web PubSub. A chave de acesso dentro da cadeia de conexão é semelhante a uma senha de root para o seu serviço. Em ambientes de produção, tenha sempre o cuidado de proteger as suas chaves de acesso. Use o Azure Key Vault para gerenciar e girar suas chaves com segurança. Evite distribuir chaves de acesso para outros usuários, codificá-las ou salvá-las em qualquer lugar em texto simples acessível a outras pessoas. Rode as chaves se acreditar que podem ter sido comprometidas.

Use o comando Azure CLI az webpubsub key para obter o ConnectionString do serviço. Substitua o espaço reservado <your-unique-resource-name> pelo nome da sua instância do Azure Web PubSub.

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

Copie a cadeia de conexão para usar mais tarde.

Criar um cliente assinante

Os clientes se conectam ao serviço Azure Web PubSub por meio do protocolo WebSocket padrão usando a autenticação JSON Web Token (JWT). O SDK de serviço fornece métodos auxiliares para gerar o token. Neste tutorial, o assinante gera diretamente o token de ConnectionString. Em aplicativos reais, um aplicativo do lado do servidor geralmente lida com o fluxo de trabalho de autenticação/autorização. Para entender melhor o fluxo de trabalho, consulte o tutorial Criar um aplicativo de bate-papo.

  1. Primeiro, crie um diretório de projeto nomeado subscriber para este projeto e instale as dependências necessárias:

    • O pacote Websocket.Client é um pacote de terceiros que suporta conexões WebSocket. Você pode usar qualquer API/biblioteca que suporte WebSocket.
    • O pacote Azure.Messaging.WebPubSub SDK ajuda a gerar o 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. Substitua o código no Program.cs com o seguinte código que se conectará ao serviço:

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

    O código cria uma conexão WebSocket que está conectada a um hub no Web PubSub. Um hub é uma unidade lógica no Web PubSub onde você pode publicar mensagens para um grupo de clientes. Os conceitos-chave contêm a explicação detalhada sobre os termos usados no Web PubSub.

    O serviço Web PubSub usa autenticação JSON Web Token (JWT). O código de exemplo usa WebPubSubServiceClient.GetClientAccessUri() no Web PubSub SDK para gerar uma URL para o serviço que contém a URL completa com um token de acesso válido.

    Depois que a conexão é estabelecida, seu cliente recebe mensagens através da conexão WebSocket. O cliente usa client.MessageReceived.Subscribe(msg => ...)); para ouvir as mensagens recebidas.

  3. Para iniciar o assinante, execute o seguinte comando substituindo <Web-PubSub-connection-string> pela cadeia de conexão copiada anteriormente:

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

2. Publicar mensagens usando o SDK do serviço

Crie um editor usando o SDK do Azure Web PubSub para publicar uma mensagem no cliente conectado. Para este projeto, você precisará abrir outro shell de comando.

  1. Primeiro, crie um diretório de projeto chamado publisher e instale as dependências necessárias:

    mkdir publisher
    cd publisher
    dotnet new console
    dotnet add package Azure.Messaging.WebPubSub
    
  2. Atualize o Program.cs arquivo para usar a WebPubSubServiceClient classe e enviar mensagens para os 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);
            }
        }
    }
    
    

    A SendToAllAsync() chamada simplesmente envia uma mensagem para todos os clientes conectados no hub.

  3. Envie uma mensagem executando o seguinte comando. Substitua <Web-PubSub-connection-string> pela cadeia de conexão copiada anteriormente.

    dotnet run <Web-PubSub-connection-string> "myHub1" "Hello World"
    
  4. Verifique o shell de comando do assinante para ver se ele recebeu a mensagem:

    Message received: Hello World
    

Limpeza

Você pode excluir os recursos criados neste início rápido excluindo o grupo de recursos que os contém.

az group delete --name myResourceGroup --yes

Se você não estiver planejando continuar usando o Azure Cloud Shell, poderá evitar o acúmulo de custos excluindo o grupo de recursos que contém a conta de armazenamento associada. O grupo de recursos é denominado cloud-shell-storage-<your-region>. Execute o seguinte comando, substituindo <CloudShellResourceGroup> pelo nome do grupo do Cloud Shell.

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

Atenção

A exclusão de grupos de recursos excluirá todos os recursos, incluindo recursos criados fora do escopo deste tutorial.

Próximos passos

Este tutorial fornece uma ideia básica de como se conectar ao serviço Web PubSub e publicar mensagens para os clientes conectados.

Confira outros tutoriais para se aprofundar em como usar o serviço.