Partilhar via


Enviar mensagens do servidor

O modelo de pedido/resposta HTTP familiar foi concebido para ser fácil de trabalhar e dimensionável. No entanto, hoje em dia os utilizadores finais exigem muito mais da Web do que foram originalmente concebidos. O protocolo HTTP requer que os utilizadores iniciem o pedido para receberem uma resposta. No entanto, os programadores precisam de uma forma de enviar dados do servidor para os clientes sem que estes os peçam; por outras palavras, precisam de "emitir" dados para os clientes, como emitir o preço de licitação mais recente de um produto num site de leilões ou mover rapidamente os preços das ações numa aplicação financeira.

GIF do servidor de aplicações a enviar dados para o cliente ligado.

Este guia de início rápido demonstra como

  • subscrever mensagens de um servidor de aplicações
  • enviar dados de um servidor de aplicações para todos os clientes ligados

Pré-requisitos

  • Um recurso Web PubSub. Se ainda não criou um, pode seguir a documentação de orientação: Criar um recurso Web PubSub
  • Um editor de código, como o Visual Studio Code
  • Instalar as dependências do idioma que planeia utilizar

Criar um cliente subscritor

Para subscrever mensagens enviadas a partir do servidor de aplicações, um cliente, seja um browser, uma aplicação móvel ou um dispositivo IoT, tem de ligar primeiro ao recurso Web PubSub e escutar o evento de mensagem adequado.

Criar um diretório de projeto com o nome subscriber e instalar as dependências necessárias

mkdir subscriber
cd subscriber
npm init -y
    
# The client SDK is available as a module on NPM
npm install @azure/web-pubsub-client

Ligar ao recurso Web PubSub e registar um serviço de escuta para o server-message evento

Um cliente utiliza um URL de Acesso de Cliente para se ligar e autenticar com o recurso. Este URL segue um padrão de wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>. Um cliente pode ter algumas formas de obter o URL de Acesso do Cliente. Para este guia de introdução, pode copiar e colar um dos portal do Azure apresentados no diagrama seguinte. É melhor prática não codificar o URL de Acesso do Cliente no seu código. No mundo da produção, normalmente, configuramos um servidor de aplicações para devolver este URL a pedido. Gerar URL de Acesso de Cliente descreve a prática em detalhe.

O diagrama mostra como obter o URL de acesso do cliente.

Conforme mostrado no diagrama acima, o cliente associa-se ao hub com o nome myHub1.

Na pasta do subscriber projeto, crie um ficheiro com o nome subscribe.js com o seguinte código

const { WebPubSubClient } = require("@azure/web-pubsub-client");

// Instantiates the client object
// <client-access-url> is copied from Azure portal mentioned above
const client = new WebPubSubClient("<client-access-url>")

// Registers a handler for the "server-message" event
client.on("server-message", (e) => {
    console.log(`Received message ${e.message.data}`)
});

// Before a client can receive a message, 
// you must invoke start() on the client object.
client.start();

Execute o programa

node subscribe.js

Agora, este cliente estabelece uma ligação com o recurso Web PubSub e está pronto para receber mensagens enviadas a partir do servidor da aplicação.

Enviar mensagens push a partir do servidor de aplicações

Agora que tem um cliente ligado ao recurso Web PubSub, pode enviar mensagens push a partir de um servidor de aplicações em qualquer altura através do SDK do servidor fornecido pelo Web PubSub.

Criar um novo diretório de projeto com o nome publisher e instalar as dependências necessárias

mkdir publisher
cd publisher

npm init

# This command installs the server SDK from NPM, 
# which is different from the client SDK you used in subscribe.js
npm install --save @azure/web-pubsub

Criar um publish.js ficheiro com o seguinte código

const { WebPubSubServiceClient } = require('@azure/web-pubsub');

// This is the hub name we used on Azure portal when generating the Client Access URL. 
// It ensures this server can push messages to clients in the hub named "myHub1".
const hub = "myHub1";
    
let server = new WebPubSubServiceClient(process.env.WebPubSubConnectionString, hub);

// By default, the content type is `application/json`. 
// Specify contentType as `text/plain` for this demo.
server.sendToAll(process.argv[2], { contentType: "text/plain" });

A server.sendToAll() chamada envia uma mensagem a todos os clientes ligados num hub.

Obter a cadeia de ligação

Importante

Uma cadeia de ligação inclui informações de autorização necessárias para que a sua aplicação aceda ao serviço Web PubSub. A chave de acesso dentro da cadeia de ligação é semelhante a uma palavra-passe de raiz para o seu serviço.

Para este guia de início rápido, vamos obtê-lo a partir de portal do Azure conforme mostrado abaixo. Um diagrama mostra como obter o URL de acesso do cliente.

Executar o programa de servidor

Execute os seguintes comandos numa nova shell de comandos.

# Set the environment variable for your connection string.
export WebPubSubConnectionString="<Put your connection string here>" 

node publish.js "Hello World"

Observar as mensagens recebidas no lado do cliente

GIF de demonstrar um servidor de aplicações a enviar dados para o cliente ligado.

Experimente executar o mesmo programa "subscrever" em várias shells de comandos para estimular mais do que os clientes. Assim que o programa de "publicação" for executado, deverá ver mensagens a serem entregues em tempo real a todos estes clientes.

Resumo

Este início rápido demonstra como é fácil enviar mensagens de um servidor de aplicações para todos os clientes ligados num hub. Além disso, o Web PubSub permite-lhe enviar mensagens push para

  • um subconjunto dos clientes num hub
  • um grupo específico num hub
  • um subconjunto de clientes num grupo

Estas APIs permitem uma grande quantidade de casos de utilização, permitindo que os programadores se concentrem na lógica de negócio exclusiva, ao mesmo tempo que têm a certeza de que o Web PubSub oferece baixa latência (<100ms),elevada disponibilidade e dimensionamento maciço (milhões de ligações simultâneas).

Passos seguintes

No próximo passo, vamos explorar como trabalhar com o sistema de eventos do Web PubSub, necessário para criar aplicações Web completas.