Compartir vía


Insertar mensajes desde el servidor

El conocido modelo de solicitud/respuesta HTTP se diseñó para que sea fácil de trabajar y escalable. Sin embargo, en la actualidad, los usuarios finales demandan mucho más de la web de lo que fue diseñada originalmente para ofrecer. El protocolo HTTP requiere que los usuarios inicien la solicitud para recibir una respuesta. Sin embargo, los desarrolladores necesitan una forma de enviar datos del servidor a los clientes sin tener que solicitarlos; en otras palabras, necesitan "insertar" los datos en los clientes, como insertar el último precio de oferta de un producto en un sitio de subastas o los precios de las acciones en tiempo real en una aplicación financiera.

GIF del servidor de aplicaciones insertando datos en el cliente conectado.

Esta guía de inicio rápido muestra cómo

  • suscribirse a mensajes desde un servidor de aplicaciones
  • insertar datos desde un servidor de aplicaciones a todos los clientes conectados

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.

Requisitos previos

  • Un recurso de Web PubSub. Si no ha creado uno, puede seguir las instrucciones: Creación de un recurso de Web PubSub
  • Un editor de código como Visual Studio Code
  • Instalación de las dependencias para el lenguaje que planea usar

Creación de un cliente de suscriptor

Para suscribirse a los mensajes insertados desde el servidor de aplicaciones, un cliente, ya sea un explorador, una aplicación móvil o un dispositivo IoT, debe conectarse primero al recurso de Web PubSub y escuchar el evento de mensaje adecuado.

Cree un directorio del proyecto denominado subscriber e instale las dependencias requeridas

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

Conéctese al recurso de Web PubSub y registre un cliente de escucha para el evento server-message

Un cliente usa una dirección URL de acceso de cliente para conectarse y autenticarse con su recurso. Esta dirección URL sigue el patrón de wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>. Un cliente puede tener varias maneras de obtener la dirección URL de acceso de cliente. Para este inicio rápido, puede copiar y pegar una de Azure Portal, como se muestra en el siguiente diagrama. Se recomienda no codificar la URL de acceso del cliente en el código. En el mundo de producción, normalmente configuramos un servidor de aplicaciones para devolver esta dirección URL a petición. Generar dirección URL de acceso del cliente describe la práctica en detalle.

En el diagrama se muestra cómo obtener la dirección URL de acceso de cliente.

Como se muestra en el diagrama anterior, el cliente se une al centro denominado myHub1.

En la carpeta del proyecto subscriber, cree un archivo denominado subscribe.js con el código siguiente

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

Ejecución del programa

node subscribe.js

Ahora este cliente establece una conexión con el recurso de Web PubSub y está listo para recibir mensajes insertados desde el servidor de aplicaciones.

Insertar mensajes desde el servidor de aplicaciones

Ahora que tiene un cliente conectado al recurso de Web PubSub, puede insertar mensajes desde un servidor de aplicaciones en cualquier momento mediante el SDK de servidor proporcionado por Web PubSub.

Cree un nuevo directorio del proyecto denominado publisher e instale las dependencias requeridas

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

Cree un archivo publish.js con el código siguiente

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

La llamada server.sendToAll() envía un mensaje a todos los clientes conectados en un centro.

Obtención de la cadena de conexión

Importante

Una cadena de conexión incluye la información de autorización necesaria para que la aplicación acceda al servicio Web PubSub. La clave de acceso dentro de la cadena de conexión es similar a una contraseña raíz para el servicio.

Para esta guía de inicio rápido, la obtendremos de Azure Portal como se muestra a continuación. Un diagrama muestra cómo obtener la dirección URL de acceso de cliente.

Ejecute el programa de servidor

Ejecute estos comandos en un nuevo shell de comandos.

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.

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

node publish.js "Hello World"

Observe los mensajes recibidos en el lado cliente

GIF que muestra un servidor de aplicaciones insertando datos en el cliente conectado.

Prueba a ejecutar el mismo programa "subscribe" en varias ventanas de comando para simular a más de un cliente. En cuanto se ejecute el programa "publish", debería ver que los mensajes se entregan en tiempo real a todos estos clientes.

Resumen

En este inicio rápido, se muestra lo fácil que es insertar mensajes desde un servidor de aplicaciones en todos los clientes conectados de un centro. Además, Web PubSub permite insertar mensajes en

  • un subconjunto de los clientes de un centro
  • un grupo determinado en un centro
  • un subconjunto de clientes de un grupo

Estas API permiten una gran cantidad de casos de uso, lo que permite a los desarrolladores centrarse en una lógica de negocios única, a la vez que se aseguran de que Web PubSub ofrece baja latencia (<100 ms),alta disponibilidad y escala masiva (millones de conexiones simultáneas).

Pasos siguientes

En el paso siguiente, exploraremos cómo trabajar con el sistema de eventos de Web PubSub, necesario para compilar aplicaciones web completas.