Het vertrouwde HTTP-aanvraag-/antwoordmodel is ontworpen om eenvoudig te kunnen werken met en schaalbaar te zijn. Tegenwoordig vragen eindgebruikers echter veel meer van het web dan het oorspronkelijk was ontworpen. Voor het HTTP-protocol moeten gebruikers de aanvraag initiëren om een antwoord te ontvangen. Maar ontwikkelaars hebben een manier nodig om gegevens van server naar clients te verzenden zonder dat ze erom vragen; met andere woorden, ze moeten 'pushen' gegevens naar klanten, zoals het pushen van de meest recente biedprijs van een product op een veilingsite of snel veranderende aandelenkoersen in een financiële toepassing.
In deze snelstartgids ziet u hoe u
abonneren op berichten van een toepassingsserver
gegevens van een toepassingsserver naar alle verbonden clients pushen
Belangrijk
Onbewerkte verbindingsreeks worden alleen in dit artikel weergegeven voor demonstratiedoeleinden.
Een verbindingsreeks bevat de autorisatiegegevens die nodig zijn voor uw toepassing voor toegang tot de Azure Web PubSub-service. De toegangssleutel in de verbindingsreeks is vergelijkbaar met een hoofdwachtwoord voor uw service. Beveilig uw toegangssleutels altijd in productieomgevingen. Gebruik Azure Key Vault om uw sleutels veilig te beheren en te roteren en uw verbinding te beveiligen.WebPubSubServiceClient
Vermijd het distribueren van toegangssleutels naar andere gebruikers, het coderen ervan of het opslaan van ze ergens in tekst zonder opmaak die toegankelijk is voor anderen. Draai uw sleutels als u denkt dat ze mogelijk zijn aangetast.
Vereisten
Een Web PubSub-resource. Als u er nog geen hebt gemaakt, kunt u de richtlijnen volgen: Een Web PubSub-resource maken
Een code-editor zoals Visual Studio Code
Installeer de afhankelijkheden voor de taal die u wilt gebruiken
Als u zich wilt abonneren op berichten die zijn gepusht vanaf uw toepassingsserver, een client, of het nu gaat om een browser, een mobiele app of een IoT-apparaat, moet u eerst verbinding maken met uw Web PubSub-resource en luistert naar de juiste berichtgebeurtenis.
Een projectmap met de naam subscriber maken en vereiste afhankelijkheden installeren
mkdir subscriber
cd subscriber
npm init -y
# The client SDK is available as a module on NPM
npm install @azure/web-pubsub-client
Maak verbinding met uw Web PubSub-resource en registreer een listener voor de server-message gebeurtenis
Een client gebruikt een CLIENT Access-URL om verbinding te maken en te verifiëren met uw resource.
Deze URL volgt een patroon van wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>. Een client kan een aantal manieren hebben om de URL voor clienttoegang te verkrijgen. Voor deze quickstart kunt u er een kopiëren en plakken vanuit De Azure-portal die in het volgende diagram wordt weergegeven. Het is raadzaam om de URL voor clienttoegang niet in uw code vast te stellen. In de productiewereld hebben we meestal een app-server ingesteld om deze URL op aanvraag te retourneren. De URL voor clienttoegang genereren beschrijft de procedure in detail.
Zoals wordt weergegeven in het bovenstaande diagram, wordt de client gekoppeld aan de hub met de naam myHub1.
Maak in de subscriber projectmap een bestand met de naam subscribe.js met de volgende code
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();
Het programma uitvoeren
node subscribe.js
Deze client brengt nu een verbinding tot stand met uw Web PubSub-resource en is klaar om berichten te ontvangen die zijn gepusht vanaf uw toepassingsserver.
Een projectmap met de naam subscriber maken en vereiste afhankelijkheden installeren
mkdir subscriber
cd subscriber
# Create a .net console app
dotnet new console
# Add the client SDK
dotnet add package Azure.Messaging.WebPubSub.Client --prerelease
Maak verbinding met uw Web PubSub-resource en registreer een listener voor de ServerMessageReceived gebeurtenis
Een client gebruikt een CLIENT Access-URL om verbinding te maken en te verifiëren met uw resource.
Deze URL volgt een patroon van wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>. Een client kan een aantal manieren hebben om de URL voor clienttoegang te verkrijgen. Voor deze quickstart kunt u er een kopiëren en plakken vanuit De Azure-portal die in het volgende diagram wordt weergegeven. Het is raadzaam om de URL voor clienttoegang niet in uw code vast te stellen. In de productiewereld hebben we meestal een app-server ingesteld om deze URL op aanvraag te retourneren. De URL voor clienttoegang genereren beschrijft de procedure in detail.
Zoals wordt weergegeven in het bovenstaande diagram, wordt de client gekoppeld aan de hub met de naam myHub1.
Vervang de code in de Program.cs code door de volgende code
using Azure.Messaging.WebPubSub.Clients;
// Instantiates the client object
// <client-access-uri> is copied from Azure portal mentioned above
var client = new WebPubSubClient(new Uri("<client-access-uri>"));
client.ServerMessageReceived += eventArgs =>
{
Console.WriteLine($"Receive message: {eventArgs.Message.Data}");
return Task.CompletedTask;
};
client.Connected += eventArgs =>
{
Console.WriteLine("Connected");
return Task.CompletedTask;
};
await client.StartAsync();
// This keeps the subscriber active until the user closes the stream by pressing Ctrl+C
var streaming = Console.ReadLine();
while (streaming != null)
{
if (!string.IsNullOrEmpty(streaming))
{
await client.SendToGroupAsync("stream", BinaryData.FromString(streaming + Environment.NewLine), WebPubSubDataType.Text);
}
streaming = Console.ReadLine();
}
await client.StopAsync();
Voer de volgende opdracht uit
dotnet run
Deze client brengt nu een verbinding tot stand met uw Web PubSub-resource en is klaar om berichten te ontvangen die zijn gepusht vanaf uw toepassingsserver.
Maak een projectmap met de naam subscriber en installeer de vereiste afhankelijkheden:
Gebruik de WebSocket-API om verbinding te maken met uw Web PubSub-resource. subscribe.py Een bestand maken met de volgende code
import asyncio
import sys
import websockets
from azure.messaging.webpubsubservice import WebPubSubServiceClient
async def connect(url):
async with websockets.connect(url) as ws:
print('connected')
while True:
print('Received message: ' + await ws.recv())
if __name__ == '__main__':
if len(sys.argv) != 3:
print('Usage: python subscribe.py <connection-string> <hub-name>')
exit(1)
connection_string = sys.argv[1]
hub_name = sys.argv[2]
service = WebPubSubServiceClient.from_connection_string(connection_string, hub=hub_name)
token = service.get_client_access_token()
try:
asyncio.get_event_loop().run_until_complete(connect(token['url']))
except KeyboardInterrupt:
pass
De code maakt een WebSocket-verbinding die is verbonden met een hub in Web PubSub. Een hub is een logische eenheid in Web PubSub waar u berichten naar een groep clients kunt publiceren. De belangrijkste concepten bevatten de gedetailleerde uitleg over de termen die worden gebruikt in Web PubSub.
De Web PubSub-service maakt gebruik van JSON Web Token-verificatie (JWT ). De voorbeeldcode gebruikt WebPubSubServiceClient.GetClientAccessUri() in de Web PubSub SDK om een URL te genereren naar de service die de volledige URL met een geldig toegangstoken bevat.
Nadat de verbinding tot stand is gebracht, ontvangt uw client berichten via de WebSocket-verbinding. Gebruik await ws.recv() deze functie om te luisteren naar binnenkomende berichten.
Voer de volgende opdracht uit
python subscribe.py $connection_string "myHub1"
Een projectmap maken met de naam pubsub
mkdir pubsub
cd pubsub
Gebruik Maven om een nieuwe console-app te maken met de naam webpubsub-quickstart-subscriber;
In Web PubSub kunt u verbinding maken met de service en u abonneren op berichten via WebSocket-verbindingen. WebSocket is een full-duplex communicatiekanaal waarmee de service in realtime berichten naar uw client kan pushen. U kunt elke API of bibliotheek gebruiken die ondersteuning biedt voor WebSocket. Voor dit voorbeeld gebruiken we pakket Java-WebSocket.
Ga naar de map /src/main/java/com/webpubsub/quickstart .
Bewerk de inhoud van het App.java-bestand door de volgende code:
package com.webpubsub.quickstart;
import com.azure.messaging.webpubsub.*;
import com.azure.messaging.webpubsub.models.*;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
/**
* Connect to Azure Web PubSub service using WebSocket protocol
*/
public class App
{
public static void main( String[] args ) throws IOException, URISyntaxException
{
if (args.length != 2) {
System.out.println("Expecting 2 arguments: <connection-string> <hub-name>");
return;
}
WebPubSubServiceClient service = new WebPubSubServiceClientBuilder()
.connectionString(args[0])
.hub(args[1])
.buildClient();
WebPubSubClientAccessToken token = service.getClientAccessToken(new GetClientAccessTokenOptions());
WebSocketClient webSocketClient = new WebSocketClient(new URI(token.getUrl())) {
@Override
public void onMessage(String message) {
System.out.println(String.format("Message received: %s", message));
}
@Override
public void onClose(int arg0, String arg1, boolean arg2) {
// TODO Auto-generated method stub
}
@Override
public void onError(Exception arg0) {
// TODO Auto-generated method stub
}
@Override
public void onOpen(ServerHandshake arg0) {
// TODO Auto-generated method stub
}
};
webSocketClient.connect();
System.in.read();
}
}
Met deze code maakt u een WebSocket-verbinding die is verbonden met een hub in Azure Web PubSub. Een hub is een logische eenheid in Azure Web PubSub waar u berichten kunt publiceren naar een groep clients. De belangrijkste concepten bevatten de gedetailleerde uitleg over de termen die worden gebruikt in Azure Web PubSub.
De Web PubSub-service maakt gebruik van JSON Web Token-verificatie (JWT ). De voorbeeldcode gebruikt WebPubSubServiceClient.GetClientAccessUri() in de Web PubSub SDK om een URL te genereren naar de service die de volledige URL met een geldig toegangstoken bevat.
Nadat de verbinding tot stand is gebracht, ontvangt uw client berichten via de WebSocket-verbinding. Gebruik onMessage(String message) deze functie om te luisteren naar binnenkomende berichten.
Nu u een client hebt verbonden met uw Web PubSub-resource, kunt u op elk gewenst moment berichten van een toepassingsserver pushen met behulp van de server-SDK van Web PubSub.
Maak een nieuwe projectmap met de naam publisher en installeer de vereiste afhankelijkheden
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
publish.js Een bestand maken met de volgende code
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" });
De server.sendToAll() oproep verzendt een bericht naar alle verbonden clients in een hub.
De verbindingsreeks ophalen
Belangrijk
Een verbindingsreeks bevat autorisatiegegevens die vereist zijn voor uw toepassing voor toegang tot de Web PubSub-service. De toegangssleutel in de verbindingsreeks is vergelijkbaar met een hoofdwachtwoord voor uw service.
Voor deze snelstartgids krijgt u deze uit Azure Portal, zoals hieronder wordt weergegeven.
Het serverprogramma uitvoeren
Voer de volgende opdrachten uit in een nieuwe opdrachtshell.
Onbewerkte verbindingsreeks worden alleen in dit artikel weergegeven voor demonstratiedoeleinden. Beveilig uw toegangssleutels altijd in productieomgevingen. Gebruik Azure Key Vault om uw sleutels veilig te beheren en te roteren en uw verbinding te beveiligen.WebPubSubServiceClient
# Set the environment variable for your connection string.
export WebPubSubConnectionString="<Put your connection string here>"
node publish.js "Hello World"
Bekijk de ontvangen berichten aan de clientzijde
Probeer hetzelfde 'abonneren'-programma uit te voeren in meerdere opdrachtshells om meer dan clients te stimuleren. Zodra het 'publiceren'-programma wordt uitgevoerd, ziet u dat berichten in realtime worden bezorgd bij al deze clients.
Maak een projectmap met de naam publisher en installeer de vereiste afhankelijkheden:
mkdir publisher
cd publisher
dotnet new console
dotnet add package Azure.Messaging.WebPubSub
Vervang het Program.cs bestand door de volgende code
using System;
using System.Threading.Tasks;
using Azure.Messaging.WebPubSub;
namespace publisher
{
class Program
{
static async Task Main(string[] args)
{
if (args.Length != 3) {
Console.WriteLine("Usage: publisher <connectionString> <hub> <message>");
return;
}
var connectionString = args[0];
var hub = args[1];
var message = args[2];
// Either generate the token or fetch it from server or fetch a temp one from the portal
var serviceClient = new WebPubSubServiceClient(connectionString, hub);
await serviceClient.SendToAllAsync(message);
}
}
}
De SendToAllAsync() oproep verzendt een bericht naar alle verbonden clients in de hub.
Voer het serverprogramma uit om berichten naar alle verbonden clients te pushen
$connection_string="<connection-string>"
dotnet run $connection_string "myHub1" "Hello World"
Bekijk de ontvangen berichten aan de clientzijde
# On the command shell used for running the "subscribe" program, you should see the received the messaged logged there.
# Try running the same "subscribe" program in multiple command shells, which simulates more than clients.
# Try running the "publish" program several times and you see messages being delivered in real-time to all these clients.
Message received: Hello World
Maak eerst een projectmap met de naam publisher en installeer de vereiste afhankelijkheden:
mkdir publisher
cd publisher
# Create venv
python -m venv env
# Active venv
source ./env/bin/activate
pip install azure-messaging-webpubsubservice
Gebruik de Azure Web PubSub SDK om een bericht naar de service te publiceren. Maak een publish.py bestand met de onderstaande code:
import sys
from azure.messaging.webpubsubservice import WebPubSubServiceClient
if __name__ == '__main__':
if len(sys.argv) != 4:
print('Usage: python publish.py <connection-string> <hub-name> <message>')
exit(1)
connection_string = sys.argv[1]
hub_name = sys.argv[2]
message = sys.argv[3]
service = WebPubSubServiceClient.from_connection_string(connection_string, hub=hub_name)
res = service.send_to_all(message, content_type='text/plain')
print(res)
Het send_to_all() bericht verzenden naar alle verbonden clients in een hub.
Controleer de vorige opdrachtshell op de melding dat de abonnee het bericht heeft ontvangen:
Received message: Hello World
Ga naar de pubsub map. Gebruik Maven om een uitgeverconsole-app webpubsub-quickstart-publisher te maken en ga naar de map webpubsub-quickstart-publisher :
Gebruik de Azure Web PubSub SDK om een bericht naar de service te publiceren. Ga naar de map /src/main/java/com/webpubsub/quickstart , open het App.java-bestand in uw editor en vervang de inhoud door de volgende code:
package com.webpubsub.quickstart;
import com.azure.messaging.webpubsub.*;
import com.azure.messaging.webpubsub.models.*;
/**
* Publish messages using Azure Web PubSub service SDK
*
*/
public class App
{
public static void main( String[] args )
{
if (args.length != 3) {
System.out.println("Expecting 3 arguments: <connection-string> <hub-name> <message>");
return;
}
WebPubSubServiceClient service = new WebPubSubServiceClientBuilder()
.connectionString(args[0])
.hub(args[1])
.buildClient();
service.sendToAll(args[2], WebPubSubContentType.TEXT_PLAIN);
}
}
De sendToAll() oproep verzendt een bericht naar alle verbonden clients in een hub.
Ga naar de map webpubsub-quickstart-publisher en voer het project uit met behulp van de volgende opdracht:
U kunt zien dat de vorige abonnee het bericht heeft ontvangen:
Message received: Hello World
Samenvatting
In deze quickstart ziet u hoe eenvoudig het is om berichten van een toepassingsserver naar alle verbonden clients in een hub te pushen. Daarnaast kunt u met Web PubSub berichten pushen naar
een subset van de clients in een hub
een bepaalde groep in een hub
een subset van clients in een groep
Deze API's maken een schat aan gebruiksvoorbeelden mogelijk, zodat ontwikkelaars zich kunnen richten op unieke bedrijfslogica, terwijl ze er zeker van zijn dat Web PubSub lage latentie biedt (<100 ms), hoge beschikbaarheid en enorme schaal (miljoen+ gelijktijdige verbindingen).
Volgende stappen
In de volgende stap verkennen we hoe u kunt werken met het gebeurtenissysteem van Web PubSub, dat nodig is om volledige webtoepassingen te bouwen.