Självstudie: Publicera och prenumerera på meddelanden med hjälp av WebSocket API och Azure Web PubSub service SDK
Artikel
Tjänsten Azure Web PubSub hjälper dig att enkelt skapa webbmeddelandeprogram i realtid. I den här självstudien får du lära dig hur du prenumererar på tjänsten med hjälp av WebSocket-API:et och publicerar meddelanden med hjälp av Web PubSub Service SDK.
I den här självstudien lär du dig att:
Skapa en Web PubSub-tjänstinstans
Generera den fullständiga URL:en för att upprätta WebSocket-anslutningen
Skapa en Web PubSub-prenumerantklient för att ta emot meddelanden med standardprotokollet WebSocket
Skapa en Web PubSub-utgivarklient för att publicera meddelanden med hjälp av Web PubSub Service SDK
Förutsättningar
Skapa ett kostnadsfritt konto i en Azure-prenumeration.
Ett Bash-kommandogränssnitt. Använd antingen ett lokalt gränssnitt eller Bash-miljön i Azure Cloud Shell.
Följ de här stegen för att konfigurera Azure CLI och din projektmiljö.
Öppna ett kommandogränssnitt.
Uppgradera till den senaste versionen av Azure CLI.
az upgrade
Installera Azure CLI-tillägget för Web PubSub.
az extension add --name webpubsub
Logga in på Azure CLI. När du följer anvisningarna anger du dina Azure-autentiseringsuppgifter.
az login
Skapa en resursgrupp
En resursgrupp är en logisk container där Azure-resurser distribueras och hanteras. Använd kommandot az group create för att skapa en resursgrupp med namnet myResourceGroup på eastus platsen.
az group create --name myResourceGroup --location EastUS
1. Skapa en Azure Web PubSub-instans
Skapa en Web PubSub-instans
Om du vill skapa en Web PubSub-instans i resursgruppen som du skapade använder du kommandot Azure CLI az webpubsub create . Följande kommando skapar en Free Web PubSub-resurs under resursgruppen myResourceGroup i EastUS:
Varje Web PubSub-resurs måste ha ett unikt namn. Ersätt <ditt unika resursnamn> med namnet på din Web PubSub-instans i följande kommando.
Utdata från det här kommandot visar egenskaperna för den nyligen skapade resursen. Notera följande reprties:
name: Web PubSub-namnet som du angav i parametern --name ovan.
hostName: I exemplet är <your-unique-resource-name>.webpubsub.azure.com/värdnamnet .
I det här läget är ditt Azure-konto det enda som har behörighet att utföra åtgärder på den nya resursen.
Hämta anslutningssträngen
Viktigt!
En niska veze innehåller den auktoriseringsinformation som krävs för att ditt program ska få åtkomst till Azure Web PubSub-tjänsten. Åtkomstnyckeln i niska veze liknar ett rotlösenord för din tjänst. I produktionsmiljöer bör du alltid vara noga med att skydda dina åtkomstnycklar. Använd Azure Key Vault för att hantera och rotera dina nycklar på ett säkert sätt. 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.
Använd kommandot Azure CLI az webpubsub key för att hämta ConnectionString för tjänsten. <your-unique-resource-name> Ersätt platshållaren med namnet på din Azure Web PubSub-instans.
az webpubsub key show --resource-group myResourceGroup --name <your-unique-resource-name> --query primaryConnectionString --output tsv
Kopiera niska veze som ska användas senare.
Skapa en prenumerantklient
Klienter ansluter till Azure Web PubSub-tjänsten via standard-WebSocket-protokollet med JSON-webbtokenautentisering (JWT). Tjänst-SDK:et tillhandahåller hjälpmetoder för att generera token. I den här självstudien genererar prenumeranten token direkt från ConnectionString. I verkliga program hanterar ett program på serversidan vanligtvis arbetsflödet för autentisering/auktorisering. Mer information om arbetsflödet finns i självstudien Skapa en chattapp.
Skapa först en projektkatalog med namnet subscriber för det här projektet och installera nödvändiga beroenden:
Paketet Websocket.Client är ett tredjepartspaket som stöder WebSocket-anslutningar. Du kan använda alla API/bibliotek som stöder WebSocket.
SDK-paketet Azure.Messaging.WebPubSub hjälper till att generera JWT-token.
mkdir subscriber
cd subscriber
dotnet new console
dotnet add package Websocket.Client --version 4.3.30
dotnet add package Azure.Messaging.WebPubSub --version 1.0.0
Ersätt koden i Program.cs med följande kod som ansluter till tjänsten:
using System;
using System.Threading.Tasks;
using Azure.Messaging.WebPubSub;
using Websocket.Client;
namespace subscriber
{
class Program
{
static async Task Main(string[] args)
{
if (args.Length != 2)
{
Console.WriteLine("Usage: subscriber <connectionString> <hub>");
return;
}
var connectionString = args[0];
var hub = args[1];
// Either generate the URL or fetch it from server or fetch a temp one from the portal
var serviceClient = new WebPubSubServiceClient(connectionString, hub);
var url = serviceClient.GetClientAccessUri();
using (var client = new WebsocketClient(url))
{
// Disable the auto disconnect and reconnect because the sample would like the client to stay online even no data comes in
client.ReconnectTimeout = null;
client.MessageReceived.Subscribe(msg => Console.WriteLine($"Message received: {msg}"));
await client.Start();
Console.WriteLine("Connected.");
Console.Read();
}
}
}
}
Koden skapar en WebSocket-anslutning som är ansluten till en hubb i Web PubSub. En hubb är en logisk enhet i Web PubSub där du kan publicera meddelanden till en grupp klienter. Viktiga begrepp innehåller en detaljerad förklaring av de termer som används i Web PubSub.
Tjänsten Web PubSub använder JSON-autentisering (JWT). Exempelkoden använder WebPubSubServiceClient.GetClientAccessUri() i Web PubSub SDK för att generera en URL till tjänsten som innehåller den fullständiga URL:en med en giltig åtkomsttoken.
När anslutningen har upprättats tar klienten emot meddelanden via WebSocket-anslutningen. Klienten använder client.MessageReceived.Subscribe(msg => ...)); för att lyssna efter inkommande meddelanden.
Starta prenumeranten genom att köra följande kommando och <Web-PubSub-connection-string> ersätta med niska veze du kopierade tidigare:
dotnet run <Web-PubSub-connection-string> "myHub1"
Skapa först en projektkatalog med namnet subscriber och installera nödvändiga beroenden:
Använd WebSocket-API:et för att ansluta till Web PubSub-tjänsten. Skapa en subscribe.js fil med följande kod:
const WebSocket = require('ws');
const { WebPubSubServiceClient } = require('@azure/web-pubsub');
async function main() {
const hub = "pubsub";
let service = new WebPubSubServiceClient(process.env.WebPubSubConnectionString, hub);
let token = await service.getClientAccessToken();
let ws = new WebSocket(token.url);
ws.on('open', () => console.log('connected'));
ws.on('message', data => console.log('Message received: %s', data));
}
main();
Koden skapar en WebSocket-anslutning som är ansluten till en hubb i Web PubSub. En hubb är en logisk enhet i Web PubSub där du kan publicera meddelanden till en grupp klienter. Viktiga begrepp innehåller en detaljerad förklaring av de termer som används i Web PubSub.
Tjänsten Web PubSub använder JSON-autentisering (JWT). Exempelkoden använder WebPubSubServiceClient.GetClientAccessUri() i Web PubSub SDK för att generera en URL till tjänsten som innehåller den fullständiga URL:en med en giltig åtkomsttoken.
När anslutningen har upprättats tar klienten emot meddelanden via WebSocket-anslutningen. Klienten använder client.MessageReceived.Subscribe(msg => ...)); för att lyssna efter inkommande meddelanden.
Kör följande kommando och <Web-PubSub-connection-string> ersätt med niska veze du kopierade tidigare. Om du använder Windows-kommandogränssnittet kan du använda set i stället för export.
Använd WebSocket-API:et för att ansluta till Web PubSub-tjänsten. Skapa en subscribe.py fil med följande kod:
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
Koden skapar en WebSocket-anslutning som är ansluten till en hubb i Web PubSub. En hubb är en logisk enhet i Web PubSub där du kan publicera meddelanden till en grupp klienter. Viktiga begrepp innehåller en detaljerad förklaring av de termer som används i Web PubSub.
Tjänsten Web PubSub använder JSON-autentisering (JWT). Exempelkoden använder WebPubSubServiceClient.GetClientAccessUri() i Web PubSub SDK för att generera en URL till tjänsten som innehåller den fullständiga URL:en med en giltig åtkomsttoken.
När anslutningen har upprättats får klienten meddelanden via WebSocket-anslutningen. Använd await ws.recv() för att lyssna efter inkommande meddelanden.
Kör följande kommando som <Web-PubSub-connection-string> ersätter med niska veze du kopierade tidigare:
Skapa först en projektkatalog med namnet pubsub för den här självstudien.
mkdir pubsub
cd pubsub
pubsub I katalogen använder du Maven för att skapa en ny konsolapp med namnet webpubsub-quickstart-subscriberoch går sedan till katalogen webpubsub-quickstart-subscriber:
I Web PubSub kan du ansluta till tjänsten och prenumerera på meddelanden via WebSocket-anslutningar. WebSocket är en kommunikationskanal med full duplex som gör att tjänsten kan skicka meddelanden till klienten i realtid. Du kan använda valfritt API eller bibliotek som stöder WebSocket. I det här exemplet använder vi paketet Java-WebSocket.
Gå till katalogen /src/main/java/com/webpubsub/quickstart .
Redigera ersätter innehållet i App.java-filen med följande kod:
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();
}
}
Den här koden skapar en WebSocket-anslutning som är ansluten till en hubb i Azure Web PubSub. En hubb är en logisk enhet i Azure Web PubSub där du kan publicera meddelanden till en grupp klienter. Viktiga begrepp innehåller en detaljerad förklaring av de termer som används i Azure Web PubSub.
Tjänsten Web PubSub använder JSON-autentisering (JWT). Exempelkoden använder WebPubSubServiceClient.GetClientAccessUri() i Web PubSub SDK för att generera en URL till tjänsten som innehåller den fullständiga URL:en med en giltig åtkomsttoken.
När anslutningen har upprättats tar klienten emot meddelanden via WebSocket-anslutningen. Använd onMessage(String message) för att lyssna efter inkommande meddelanden.
Starta prenumerantappen genom att gå till katalogen webpubsub-quickstart-subscriber och köra följande kommando. Ersätt <Web-PubSub-connection-string> med niska veze du kopierade tidigare.
Skapa en utgivare med hjälp av Azure Web PubSub SDK för att publicera ett meddelande till den anslutna klienten. För det här projektet måste du öppna ett annat kommandogränssnitt.
Skapa först en projektkatalog med namnet publisher och installera nödvändiga beroenden:
mkdir publisher
cd publisher
dotnet new console
dotnet add package Azure.Messaging.WebPubSub
Program.cs Uppdatera filen så att den WebPubSubServiceClient använder klassen och skickar meddelanden till klienterna.
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);
}
}
}
Anropet SendToAllAsync() skickar helt enkelt ett meddelande till alla anslutna klienter i hubben.
Skicka ett meddelande genom att köra följande kommando. Ersätt <Web-PubSub-connection-string> med niska veze du kopierade tidigare.
dotnet run <Web-PubSub-connection-string> "myHub1" "Hello World"
Kontrollera att prenumerantens kommandogränssnitt tar emot meddelandet:
Message received: Hello World
Skapa först en projektkatalog med namnet publisher och installera nödvändiga beroenden:
Använd Azure Web PubSub SDK för att publicera ett meddelande till tjänsten. Skapa en publish.js fil med följande kod:
const { WebPubSubServiceClient } = require('@azure/web-pubsub');
const hub = "pubsub";
let service = new WebPubSubServiceClient(process.env.WebPubSubConnectionString, hub);
// by default it uses `application/json`, specify contentType as `text/plain` if you want plain-text
service.sendToAll(process.argv[2], { contentType: "text/plain" });
Anropet service.sendToAll() skickar helt enkelt ett meddelande till alla anslutna klienter i en hubb.
Om du vill skicka ett meddelande kör du följande kommando som <Web-PubSub-connection-string> ersätter med niska veze du kopierade tidigare. Om du använder Windows-kommandogränssnittet kan du använda set i stället för export.
Kontrollera det tidigare kommandogränssnittet till att prenumeranten tog emot meddelandet:
Received message: Hello World
Gå till pubsub katalogen. Använd Maven för att skapa en utgivarkonsolapp webpubsub-quickstart-publisher och gå till katalogen webpubsub-quickstart-publisher :
Använd Azure Web PubSub SDK för att publicera ett meddelande till tjänsten. Gå till katalogen /src/main/java/com/webpubsub/quickstart , öppna filen App.java i redigeringsprogrammet och ersätt innehållet med följande kod:
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);
}
}
Samtalet sendToAll() skickar ett meddelande till alla anslutna klienter i en hubb.
Om du vill skicka ett meddelande går du till katalogen webpubsub-quickstart-publisher och kör projektet med hjälp av följande kommando. <Web-PubSub-connection-string> Ersätt med niska veze du kopierade tidigare.
Du kan ta bort de resurser som du skapade i den här snabbstarten genom att ta bort den resursgrupp som innehåller dem.
az group delete --name myResourceGroup --yes
Om du inte planerar att fortsätta använda Azure Cloud Shell kan du undvika att ackumulera kostnader genom att ta bort resursgruppen som innehåller det associerade lagringskontot. Resursgruppen heter cloud-shell-storage-<your-region>. Kör följande kommando och <CloudShellResourceGroup> ersätt med Cloud Shell-gruppnamnet.
az group delete --name <CloudShellResourceGroup> --yes
Varning
Om du tar bort resursgrupper tas alla resurser bort, inklusive resurser som skapats utanför omfånget för den här självstudien.
Nästa steg
I den här självstudien får du en grundläggande uppfattning om hur du ansluter till Web PubSub-tjänsten och publicerar meddelanden till anslutna klienter.
Kontrollera andra självstudier för att gå vidare med hur du använder tjänsten.