Dela via


Händelsemeddelanden från klienter

I de tre första artiklarna i "snabbstarter" lärde vi oss två användbara kommunikationsmönster med hjälp av Web PubSub för realtidsmeddelanden i stor skala (miljoner+).

  • Pub/Sub bland klienter som frigör programservern från komplexiteten i att hantera beständiga anslutningar
  • Skicka meddelanden till klienter från programservern så snart nya data är tillgängliga

I den här snabbstartsguiden lär vi oss om händelsesystemet för Web PubSub så att programservern kan reagera på händelser som när

  • en klient är connected
  • en klient skickar en message, som kräver ytterligare bearbetning

GIF av programserver som tar emot klienthändelser.

Viktigt!

Råa anslutningssträng visas endast i den här artikeln i demonstrationssyfte.

En anslutningssträng innehåller den auktoriseringsinformation som krävs för att ditt program ska få åtkomst till Azure Web PubSub-tjänsten. Åtkomstnyckeln i anslutningssträng liknar ett rotlösenord för din tjänst. Skydda alltid dina åtkomstnycklar i produktionsmiljöer. Använd Azure Key Vault för att hantera och rotera dina nycklar på ett säkert sätt och skydda anslutningen med WebPubSubServiceClient.

Undvik att distribuera åtkomstnycklar till andra användare, hårdkoda dem eller spara dem var som helst i oformaterad text som är tillgänglig för andra. Rotera dina nycklar om du tror att de har komprometterats.

Förutsättningar

  • En Web PubSub-resurs. Om du inte har skapat någon kan du följa anvisningarna: Skapa en Web PubSub-resurs
  • En kodredigerare, till exempel Visual Studio Code
  • Installera beroendena för det språk som du planerar att använda

Skapa programmet

Web PubSub är en fristående tjänst till programservern. Även om ditt program behåller sin roll som en traditionell HTTP-server tar Web PubSub hand om realtidsmeddelandet som skickas mellan programservern och klienterna. Först skapar vi klientprogrammet och sedan serverprogrammet.

Skapa klienten

1. Skapa en katalog för klientappen

mkdir eventHandlerDemo
cd eventHandlerDemo

# The SDK is available as an NPM module.
npm install @azure/web-pubsub-client

2. Anslut till Web PubSub

En klient, oavsett om det är en webbläsare, en mobilapp eller en IoT-enhet, använder en URL för klientåtkomst för att ansluta och autentisera med din resurs. Den här URL:en följer ett mönster med wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>. En klient kan ha några sätt att hämta URL:en för klientåtkomst. För den här snabbstarten kan du kopiera och klistra in en från Azure Portal som visas i följande diagram. Det är bästa praxis att inte hårdkoda URL:en för klientåtkomst i koden. I produktionsvärlden konfigurerar vi vanligtvis en appserver för att returnera den här URL:en på begäran. Generera URL för klientåtkomst beskriver metoden i detalj.

Diagrammet visar hur du hämtar url för klientåtkomst.

Skapa en fil med namn client.js och lägg till följande kod

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 to the "connected" event
client.on("connected", (e) => {
  console.log(`Connection ${e.connectionId} is connected.`);
});

// You must invoke start() on the client object 
// to establish connection with your Web PubSub resource
client.start();

Skapa programservern

1. Installera express.js och Web PubSub server SDK

npm init -y
npm install --save express

# Installs the middleware from Web PubSub. This middleware will set up an endpoint for you.
npm install --save @azure/web-pubsub-express 

2. Skapa en ny fil med namnet "server.js" som konfigurerar en tom expressapp

const express = require("express");

const app = express();

app.listen(8080, () => console.log('Server started, listening on port 8080'));

3. Hantera händelser

Med Web PubSub kan programservern konfigurera hanterare för att reagera på dessa händelser när det finns vissa aktiviteter på klientsidan (till exempel när en klient är connected eller disconnected med din Web PubSub-resurs).

Här är två viktiga användningsfall:
  • när en klient är ansluten kan du sända den här statusen till alla anslutna klienter
  • när en klient skickar ett meddelande till din Web PubSub-resurs kan du spara meddelandet i valfri databas
const express = require("express");
const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");

const app = express();

const HUB_NAME = "myHub1";

let handler = new WebPubSubEventHandler(HUB_NAME, {
  path: '/eventhandler', // Exposes an endpoint 
  onConnected: async (req) => {
    console.log(`${req.context.userId} connected`);
  }, 
});

// Registers the middleware with the express app
app.use(handler.getMiddleware());

app.listen(8080, () => console.log('Server started, listening on port 8080'));

Som konfigurerats i koden ovan, när en klient ansluter till din Web PubSub-resurs, anropar Web PubSub den Webhook som hanteras av programservern på sökvägen /eventhandler. Här skriver vi helt enkelt ut userId till konsolen när en användare är ansluten.

Exponera localhost

Kör programmet. Det bör köras på localhost port 8080. I vårt syfte innebär det att din lokala expressapp inte kan nås på Internet. Web PubSub kan därför inte anropa webhooken som hanteras på sökvägen /eventhandler.

Det finns två sätt att dirigera trafiken till din localhost, en är att exponera localhost för att vara tillgänglig på Internet med hjälp av verktyg som ngrok och TunnelRelay. Ett annat sätt, och även det rekommenderade sättet är att använda awps-tunnel för att tunneltrafik från Web PubSub-tjänsten via verktyget till din lokala server.

1. Ladda ned och installera awps-tunnel

Verktyget körs på Node.js version 16 eller senare.

npm install -g @azure/web-pubsub-tunnel-tool

2. Använd tjänsten anslutningssträng och kör

Råa anslutningssträng visas endast i den här artikeln i demonstrationssyfte. Skydda alltid dina åtkomstnycklar i produktionsmiljöer. Använd Azure Key Vault för att hantera och rotera dina nycklar på ett säkert sätt och skydda anslutningen med WebPubSubServiceClient.

export WebPubSubConnectionString="<your connection string>"
awps-tunnel run --hub myHub1 --upstream http://localhost:8080

Ange händelsehanterare på din Web PubSub-resurs

Nu måste vi informera din Web PubSub-resurs om den här Webhook-URL:en. Du kan ange händelsehanterare från Azure Portal eller Azure CLI.

  1. Välj "Inställningar" på menyn och välj "Lägg till"Skärmbild av Menyn Konfigurera händelsehanterare för Azure Web PubSub.

  2. Ange ett hubbnamn. För våra syften anger du "myHub1" och väljer "Lägg till"

  3. På händelsehanterarsidan konfigurerar du följande fält, när du använder awps-tunnel verktyget använder tunnel URL-mallen schemat följt av sökvägen: tunnel:///eventhandlerSkärmbild av Azure Web PubSub Konfigurera händelsehanterare – information.

  4. Spara konfiguration Skärmbild av Azure Web PubSub Konfigurera händelsehanterare – spara.

Kör programmen

Starta programservern

node server.js

Starta klientprogrammet

node client.js

Observera resultatet

Du bör se den userId utskrivna till konsolen.

Hantera meddelandehändelse

Förutom systemhändelser som connect, connected, disconnected, kan en klient också skicka anpassade händelser.

Ändra klientprogrammet

Stoppa klientprogrammet och lägg till följande kod i client.js

// ...code from before

client.start();

// The name of the event is message and the content is in text format.
client.sendEvent("message", "sending custom event!", "text");

Ändra serverprogrammet

Stoppa klientprogrammet och lägg till följande kod i server.js

// ... code from before

let handler = new WebPubSubEventHandler(HUB_NAME, {
  path: "/eventhandler",
  onConnected: async (req) => {
    console.log(`"${req.context.userId}" is connected.`);
  },
  // This handler function will handle user system
  handleUserEvent: async (req, res) => {
    if (req.context.eventName === "message") {
      console.log(`Received message: ${req.data}`);
      // Additional logic to process the data,
      // e.g save message content to database 
      // or broadcast the message to selected clients.
    }
  },
});

//... code from before

Starta klientprogrammet och serverprogrammet igen

Du bör se både userId och skrivs Received message: sending custom event! ut till konsolen.

Sammanfattning

I den här självstudien får du en grundläggande uppfattning om hur händelsesystemet fungerar i Web PubSub. I verkliga program kan händelsesystemet hjälpa dig att implementera mer logik för att bearbeta system- och användargenererade händelser.

Nästa steg