Delen via


Azure Web PubSub CloudEvents-handlers voor Express

De Azure Web PubSub-service is een door Azure beheerde service waarmee ontwikkelaars eenvoudig webtoepassingen kunnen bouwen met realtime-functies en een patroon voor publiceren/abonneren. Elk scenario waarvoor realtime berichten over publiceren/abonneren tussen server en clients of tussen clients vereist zijn, kan gebruikmaken van de Azure Web PubSub-service. Traditionele realtime-functies waarvoor vaak polling van server vereist is of HTTP-aanvragen moeten worden ingediend, kunnen ook gebruikmaken van de Azure Web PubSub-service.

Wanneer een WebSocket-verbinding verbinding maakt, transformeert de Web PubSub-service de levenscyclus van de verbinding en berichten in gebeurtenissen in cloudEvents-indeling. Deze bibliotheek biedt snelle middleware voor het afhandelen van gebeurtenissen die de levenscyclus en berichten van de WebSocket-verbinding vertegenwoordigen, zoals wordt weergegeven in het onderstaande diagram:

cloudevents

Meer informatie over de termen die hier worden gebruikt, worden beschreven in de sectie Belangrijke concepten .

Broncode | Pakket (NPM) | API-referentiedocumentatie | Productdocumentatie | Monsters

Aan de slag

Momenteel ondersteunde omgevingen

Vereisten

1. Het pakket installeren @azure/web-pubsub-express

npm install @azure/web-pubsub-express

2. Maak een WebPubSubEventHandler

const express = require("express");

const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat");

const app = express();

app.use(handler.getMiddleware());

app.listen(3000, () =>
  console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);

Belangrijkste concepten

Verbinding

Een verbinding, ook wel een client- of clientverbinding genoemd, vertegenwoordigt een afzonderlijke WebSocket-verbinding die is verbonden met de Web PubSub-service. Wanneer de verbinding is geslaagd, wordt een unieke verbindings-id aan deze verbinding toegewezen door de Web PubSub-service.

Hub

Een hub is een logisch concept voor een set clientverbindingen. Meestal gebruikt u één hub voor één doel, bijvoorbeeld een chathub of een Notification Hub. Wanneer een clientverbinding wordt gemaakt, maakt deze verbinding met een hub en behoort deze tijdens de levensduur tot die hub. Verschillende toepassingen kunnen één Azure Web PubSub-service delen met behulp van verschillende hubnamen.

Groep

Een groep is een subset van verbindingen met de hub. U kunt op elk gewenst moment een clientverbinding toevoegen aan een groep of de clientverbinding uit de groep verwijderen. Wanneer een klant bijvoorbeeld deelneemt aan een chatruimte of wanneer een klant de chatruimte verlaat, kan deze chatruimte worden beschouwd als een groep. Een client kan lid worden van meerdere groepen en een groep kan meerdere clients bevatten.

Gebruiker

Verbindingen met Web PubSub kunnen tot één gebruiker behoren. Een gebruiker kan meerdere verbindingen hebben, bijvoorbeeld wanneer één gebruiker is verbonden via meerdere apparaten of meerdere browsertabbladen.

Client gebeurtenissen

Gebeurtenissen worden gemaakt tijdens de levenscyclus van een clientverbinding. Een eenvoudige WebSocket-clientverbinding maakt bijvoorbeeld een connect gebeurtenis wanneer wordt geprobeerd verbinding te maken met de service, een connected gebeurtenis wanneer deze verbinding heeft gemaakt met de service, een message gebeurtenis wanneer berichten naar de service worden verzonden en een disconnected gebeurtenis wanneer de verbinding met de service wordt verbroken.

Gebeurtenishandler

Gebeurtenis-handler bevat de logica voor het verwerken van de client gebeurtenissen. Gebeurtenis-handler moet vooraf worden geregistreerd en geconfigureerd in de service via de portal of Azure CLI. De plaats waar de logica van de gebeurtenis-handler wordt gehost, wordt over het algemeen beschouwd als de serverzijde.

Voorbeelden

connect De aanvraag verwerken en toewijzen<userId>

const express = require("express");

const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat", {
  handleConnect: (req, res) => {
    // auth the connection and set the userId of the connection
    res.success({
      userId: "<userId>"
    });
  },
  allowedEndpoints: ["https://<yourAllowedService>.webpubsub.azure.com"]
});

const app = express();

app.use(handler.getMiddleware());

app.listen(3000, () =>
  console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);

Alleen opgegeven eindpunten toestaan

const express = require("express");

const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat", {
  allowedEndpoints: [
    "https://<yourAllowedService1>.webpubsub.azure.com",
    "https://<yourAllowedService2>.webpubsub.azure.com"
  ]
});

const app = express();

app.use(handler.getMiddleware());

app.listen(3000, () =>
  console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);

Pad voor aangepaste gebeurtenis-handler instellen

const express = require("express");

const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat", {
  path: "customPath1"
});

const app = express();

app.use(handler.getMiddleware());

app.listen(3000, () =>
  // Azure WebPubSub Upstream ready at http://localhost:3000/customPath1
  console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);

Verbindingsstatus instellen en lezen

const express = require("express");

const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");

const handler = new WebPubSubEventHandler("chat", {
  handleConnect(req, res) {
    // You can set the state for the connection, it lasts throughout the lifetime of the connection
    res.setState("calledTime", 1);
    res.success();
  },
  handleUserEvent(req, res) {
    var calledTime = req.context.states.calledTime++;
    console.log(calledTime);
    // You can also set the state here
    res.setState("calledTime", calledTime);
    res.success();
  }
});

const app = express();

app.use(handler.getMiddleware());

app.listen(3000, () =>
  console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);

Problemen oplossen

Logboeken inschakelen

U kunt de volgende omgevingsvariabele instellen om de logboeken voor foutopsporing op te halen wanneer u deze bibliotheek gebruikt.

  • Logboeken voor foutopsporing ophalen uit de SignalR-clientbibliotheek
export AZURE_LOG_LEVEL=verbose

Voor meer gedetailleerde instructies over het inschakelen van logboeken kunt u de @azure-/loggerpakketdocumenten bekijken.

Livetracering

Gebruik Live trace vanuit de Web PubSub-serviceportal om het liveverkeer weer te geven.

Volgende stappen

Bekijk de map met voorbeelden voor gedetailleerde voorbeelden van het gebruik van deze bibliotheek.

Bijdragen

Als u een bijdrage wilt leveren aan deze bibliotheek, leest u de handleiding voor bijdragen voor meer informatie over het bouwen en testen van de code.