Instructies: een realtime samenwerkings whiteboard bouwen met behulp van Azure Web PubSub en dit implementeren in Azure App Service
Een nieuwe klasse van toepassingen is het opnieuw instellen van wat modern werk zou kunnen zijn. Terwijl Microsoft Word editors samenbrengt, verzamelt Figma ontwerpers voor dezelfde creatieve onderneming. Deze klasse toepassingen bouwt voort op een gebruikerservaring waardoor we ons verbonden voelen met onze externe medewerkers. Vanuit technisch oogpunt moeten de activiteiten van gebruikers met een lage latentie worden gesynchroniseerd tussen de schermen van gebruikers.
Overzicht
In deze handleiding gebruiken we een cloudeigen benadering en gebruiken we Azure-services om een realtime samenwerkings whiteboard te bouwen en implementeren we het project als een web-app voor Azure App Service. De whiteboard-app is toegankelijk in de browser en biedt iedereen de mogelijkheid om op hetzelfde canvas te tekenen.
Architectuur
Naam van Azure-service | Doel | Voordelen |
---|---|---|
Azure App Service | Biedt de hostingomgeving voor de back-endtoepassing, die is gebouwd met Express | Volledig beheerde omgeving voor toepassingsback-ends, zonder dat u zich zorgen hoeft te maken over de infrastructuur waarin de code wordt uitgevoerd |
Azure Web PubSub | Biedt een bidirectioneel gegevensuitwisselingskanaal met lage latentie tussen de back-endtoepassing en clients | Vermindert de serverbelasting drastisch door de server te bevrijden van het beheer van permanente WebSocket-verbindingen en schaalt naar 100 K gelijktijdige clientverbindingen met slechts één resource |
Vereisten
Aan het einde van deze instructiegids vindt u een gedetailleerde uitleg van de gegevensstroom , omdat we ons eerst gaan richten op het bouwen en implementeren van de whiteboard-app.
Als u de stapsgewijze handleiding wilt volgen, hebt u
- Een Azure-account . Als u geen Azure-abonnement hebt, maakt u een gratis Azure-account voordat u begint.
- Azure CLI (versie 2.29.0 of hoger) of Azure Cloud Shell voor het beheren van Azure-resources.
Azure-resources maken met behulp van Azure CLI
1. Aanmelden
Meld u aan bij Azure CLI door de volgende opdracht uit te voeren.
az login
Maak een resourcegroep in Azure.
az group create \ --location "westus" \ --name "whiteboard-group"
2. Een web-app-resource maken
Maak een gratis App Service-abonnement.
az appservice plan create \ --resource-group "whiteboard-group" \ --name "demo" \ --sku FREE --is-linux
Een web-app-resource maken
az webapp create \ --resource-group "whiteboard-group" \ --name "whiteboard-app" \ --plan "demo" \ --runtime "NODE:18-lts"
3. Een Web PubSub-resource maken
Maak een Web PubSub-resource.
az webpubsub create \ --name "whiteboard-app" \ --resource-group "whiteboard-group" \ --location "westus" \ --sku Free_F1
De waarde van
primaryConnectionString
ergens weergeven en opslaan voor later gebruik.az webpubsub key show \ --name "whiteboard-app" \ --resource-group "whiteboard-group"
De toepassingscode ophalen
Voer de volgende opdracht uit om een kopie van de toepassingscode op te halen. Gedetailleerde uitleg van de gegevensstroom vindt u aan het einde van deze handleiding.
git clone https://github.com/Azure/awps-webapp-sample.git
De toepassing implementeren in App Service
App Service ondersteunt veel implementatiewerkstromen. Voor deze handleiding gaan we een ZIP-pakket implementeren. Voer de volgende opdrachten uit om de ZIP voor te bereiden.
npm install npm run build zip -r app.zip *
Gebruik de volgende opdracht om deze te implementeren in Azure App Service.
az webapp deployment source config-zip \ --resource-group "whiteboard-group" \ --name "whiteboard-app" \ --src app.zip
Stel Azure Web PubSub in connection string in de toepassingsinstellingen. Gebruik de waarde van
primaryConnectionString
die u hebt opgeslagen uit een eerdere stap.az webapp config appsettings set \ --resource-group "whiteboard-group" \ --name "whiteboard-app" \ --setting Web_PubSub_ConnectionString="<primaryConnectionString>"
Upstream-server configureren voor het afhandelen van gebeurtenissen die afkomstig zijn van Web PubSub
Wanneer een client een bericht verzendt naar de Web PubSub-service, verzendt de service een HTTP-aanvraag naar een eindpunt dat u opgeeft. Dit mechanisme wordt door uw back-endserver gebruikt om berichten verder te verwerken, bijvoorbeeld als u berichten kunt behouden in een database naar keuze.
Net als bij HTTP-aanvragen moet de Web PubSub-service weten waar de toepassingsserver moet worden gevonden. Omdat de back-endtoepassing nu is geïmplementeerd in App Service, krijgen we er een openbaar toegankelijke domeinnaam voor.
De waarde van
name
ergens weergeven en opslaan.az webapp config hostname list \ --resource-group "whiteboard-group" --webapp-name "whiteboard-app"
Het eindpunt dat we hebben besloten weer te geven op de back-endserver is
/eventhandler
en de naam voor dehub
whiteboard-app"sample_draw"
az webpubsub hub create \ --resource-group "whiteboard-group" \ --name "whiteboard-app" \ --hub-name "sample_draw" \ --event-handler url-template="https://<Replace with the hostname of your Web App resource>/eventhandler" user-event-pattern="*" system-event="connected" system-event="disconnected"
Belangrijk
url-template
bestaat uit drie delen: protocol + hostnaam + pad, wat in ons geval is https://<The hostname of your Web App resource>/eventhandler
.
De whiteboard-app weergeven in een browser
Ga nu naar uw browser en ga naar uw geïmplementeerde web-app. Het is raadzaam om meerdere browsertabbladen te openen, zodat u het realtime samenwerkingsaspect van de app kunt ervaren. Of beter, deel de koppeling met een collega of vriend.
Gegevensstroom
Overzicht
In de sectie Gegevensstroom wordt dieper ingegaan op de wijze waarop de whiteboard-app is gebouwd. De whiteboard-app heeft twee transportmethoden.
- HTTP-service geschreven als een Express-app en gehost op App Service.
- WebSocket-verbindingen die worden beheerd door Azure Web PubSub.
Door Azure Web PubSub te gebruiken voor het beheren van WebSocket-verbindingen, wordt de belasting van de web-app verminderd. Afgezien van het verifiëren van de client en het leveren van afbeeldingen, heeft de web-app geen betrekking op het synchroniseren van tekenactiviteiten. De tekenactiviteiten van een client worden rechtstreeks verzonden naar Web PubSub en uitgezonden naar alle clients in een groep.
Op elk moment kan er meer dan één clienttekening zijn. Als de web-app de WebSocket-verbindingen zelfstandig zou beheren, moest elke tekenactiviteit worden uitgezonden naar alle andere clients. Het enorme verkeer en de verwerking zijn een grote belasting voor de server.
De client, gebouwd met Vue, maakt een HTTP-aanvraag voor een clienttoegangstoken naar een eindpunt /negotiate
. De back-endtoepassing is een Express-app en wordt gehost als een web-app met behulp van Azure App Service.
Wanneer de back-endtoepassing het clienttoegangstoken retourneert naar de verbindingsclient, gebruikt de client dit om een WebSocket-verbinding met Azure Web PubSub tot stand te brengen.
Als de handshake met Azure Web PubSub is geslaagd, wordt de client toegevoegd aan een groep met de naam draw
, die zich in feite abonneert op berichten die naar deze groep zijn gepubliceerd. De client krijgt ook de machtiging om berichten naar de draw
groep te verzenden.
Notitie
Om deze instructiegids gefocust te houden, worden alle verbindende clients toegevoegd aan dezelfde groep met de naam draw
en krijgen ze toestemming om berichten naar deze groep te verzenden. Als u clientverbindingen op gedetailleerd niveau wilt beheren, raadpleegt u de volledige verwijzingen van de API's van Azure Web PubSub.
Azure Web PubSub meldt de back-endtoepassing die een client heeft verbonden. De back-endtoepassing verwerkt de onConnected
gebeurtenis door de sendToAll()
aan te roepen met een nettolading van het meest recente aantal verbonden clients.
Notitie
Het is belangrijk om te weten dat als er een groot aantal onlinegebruikers in de draw
groep is, met één netwerkaanroep vanuit de back-endtoepassing, alle onlinegebruikers een melding krijgen dat een nieuwe gebruiker zojuist lid is geworden. Dit vermindert de complexiteit en belasting van de back-endtoepassing drastisch.
Zodra een client een permanente verbinding tot stand brengt met Web PubSub, wordt er een HTTP-aanvraag naar de back-endtoepassing verzonden om de meest recente shape en achtergrondgegevens op te halen op /diagram
. Een HTTP-service die wordt gehost op App Service kan worden gecombineerd met Web PubSub. App Service zorgt voor het bedienen van HTTP-eindpunten, terwijl Web PubSub zorgt voor het beheren van WebSocket-verbindingen.
De clients en de back-endtoepassing hebben nu twee manieren om gegevens uit te wisselen. De ene is de conventionele HTTP-aanvraag-antwoordcyclus en de andere is het permanente, bidirectionele kanaal via Web PubSub. De tekenacties, die afkomstig zijn van één gebruiker en naar alle gebruikers moeten worden uitgezonden zodra deze worden uitgevoerd, worden geleverd via Web PubSub. Hiervoor is geen betrokkenheid van de back-endtoepassing vereist.
Resources opschonen
Hoewel de toepassing alleen de gratis lagen van beide services gebruikt, is het raadzaam om resources te verwijderen als u deze niet meer nodig hebt. U kunt de resourcegroep samen met de resources erin verwijderen met behulp van de volgende opdracht:
az group delete
--name "whiteboard-group"