A jól ismert HTTP-kérés-/válaszmodellt úgy tervezték, hogy könnyen használható és méretezhető legyen. Manapság azonban a végfelhasználók sokkal többet igényelnek az internetről, mint amit eredetileg terveztek. A HTTP-protokoll megköveteli, hogy a felhasználók kezdeményezhessék a kérést a válasz fogadásához. A fejlesztőknek azonban módot kell adni arra, hogy adatokat küldjenek a kiszolgálóról az ügyfeleknek anélkül, hogy kérték volna őket; más szóval adatokat kell "leküldniük" az ügyfeleknek, például le kell küldeniük egy termék legújabb ajánlattételi árát egy aukciós oldalon, vagy gyorsan változó tőzsdei árfolyamokat kell leküldniük egy pénzügyi alkalmazásban.
Ez a rövid útmutató bemutatja, hogyan
feliratkozás alkalmazáskiszolgálóról érkező üzenetekre
adatok leküldése egy alkalmazáskiszolgálóról az összes csatlakoztatott ügyfélnek
Az alkalmazáskiszolgálóról leküldett üzenetekre való feliratkozáshoz egy ügyfélnek , legyen az egy böngésző, egy mobilalkalmazás vagy egy IoT-eszköz, először csatlakoznia kell a Web PubSub-erőforráshoz, és figyelnie kell a megfelelő üzeneteseményt.
Hozzon létre egy nevű subscriber projektkönyvtárat, és telepítse a szükséges függőségeket
mkdir subscriber
cd subscriber
npm init -y
# The client SDK is available as a module on NPM
npm install @azure/web-pubsub-client
Csatlakozzon a Web PubSub-erőforráshoz, és regisztráljon egy figyelőt az server-message eseményhez
Az ügyfél ügyfél-hozzáférési URL-címet használ az erőforráshoz való csatlakozáshoz és hitelesítéshez.
Ez az URL-cím a következő mintát wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>követi: . Az ügyfél többféleképpen is beszerezheti az ügyfélhozzáférési URL-címet. Ebben a rövid útmutatóban az alábbi ábrán látható Azure Portal másolhat és illeszthet be egyet. Az ajánlott eljárás az ügyfél-hozzáférési URL-cím kódolása a kódban. Az éles környezetben általában beállítunk egy alkalmazáskiszolgálót, hogy igény szerint visszaadjuk ezt az URL-címet.
Az ügyfél-hozzáférési URL-cím létrehozása részletesen ismerteti a gyakorlatot.
Ahogy a fenti ábrán is látható, az ügyfél a nevű myHub1központhoz csatlakozik.
subscriber A projektmappában hozzon létre egy nevű subscribe.js fájlt az alábbi kóddal
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();
A program futtatása
node subscribe.js
Ez az ügyfél kapcsolatot létesít a Web PubSub-erőforrással, és készen áll az alkalmazáskiszolgálóról leküldett üzenetek fogadására.
Hozzon létre egy nevű subscriber projektkönyvtárat, és telepítse a szükséges függőségeket
mkdir subscriber
cd subscriber
# Create a .net console app
dotnet new console
# Add the client SDK
dotnet add package Azure.Messaging.WebPubSub.Client --prerelease
Csatlakozzon a Web PubSub-erőforráshoz, és regisztráljon egy figyelőt az ServerMessageReceived eseményhez
Az ügyfél ügyfél-hozzáférési URL-címet használ az erőforráshoz való csatlakozáshoz és hitelesítéshez.
Ez az URL-cím a következő mintát wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>követi: . Az ügyfél többféleképpen is beszerezheti az ügyfélhozzáférési URL-címet. Ebben a rövid útmutatóban az alábbi ábrán látható Azure Portal másolhat és illeszthet be egyet. Az ajánlott eljárás az ügyfél-hozzáférési URL-cím kódolása a kódban. Az éles környezetben általában beállítunk egy alkalmazáskiszolgálót, hogy igény szerint visszaadjuk ezt az URL-címet.
Az ügyfél-hozzáférési URL-cím létrehozása részletesen ismerteti a gyakorlatot.
Ahogy a fenti ábrán is látható, az ügyfél a nevű myHub1központhoz csatlakozik.
Cserélje le a fájlban lévő Program.cs kódot a következő kódra
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();
Futtassa a következő parancsot:
dotnet run
Ez az ügyfél kapcsolatot létesít a Web PubSub-erőforrással, és készen áll az alkalmazáskiszolgálóról leküldett üzenetek fogadására.
Hozzon létre egy nevű subscriber projektkönyvtárat, és telepítse a szükséges függőségeket:
A WebSocket API-val csatlakozhat a Web PubSub-erőforráshoz. Hozzon létre egy subscribe.py fájlt az alábbi kóddal
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
A kód létrehoz egy WebSocket-kapcsolatot, amely egy Web PubSub-központhoz csatlakozik. A központ egy logikai egység a Web PubSubban, ahol üzeneteket tehet közzé ügyfelek egy csoportjában.
A fő fogalmak a Web PubSubban használt kifejezések részletes magyarázatát tartalmazzák.
A Web PubSub szolgáltatás JSON Web Token (JWT) hitelesítést használ. A mintakód a Web PubSub SDK használatával WebPubSubServiceClient.GetClientAccessUri() hoz létre egy URL-címet a szolgáltatásnak, amely érvényes hozzáférési jogkivonattal tartalmazza a teljes URL-címet.
A kapcsolat létrejötte után az ügyfél a WebSocket-kapcsolaton keresztül fogadja az üzeneteket. A használatával await ws.recv() figyeli a bejövő üzeneteket.
Futtassa a következő parancsot:
python subscribe.py $connection_string "myHub1"
Hozzon létre egy nevű projektkönyvtárat pubsub
mkdir pubsub
cd pubsub
A Maven használatával hozzon létre egy nevű új konzolalkalmazást webpubsub-quickstart-subscriber.
A Web PubSubban csatlakozhat a szolgáltatáshoz, és a WebSocket-kapcsolatokon keresztül feliratkozhat az üzenetekre. A WebSocket egy teljes kétoldalas kommunikációs csatorna, amellyel a szolgáltatás valós időben küldhet üzeneteket az ügyfélnek. Bármilyen, a WebSocketet támogató API-t vagy kódtárat használhat. Ebben a példában a Java-WebSocket csomagot használjuk.
Nyissa meg az /src/main/java/com/webpubsub/quickstart könyvtárat.
A szerkesztés cserélje le az App.java fájl tartalmát a következő kódra:
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();
}
}
Ez a kód létrehoz egy WebSocket-kapcsolatot, amely egy Azure Web PubSub-központhoz csatlakozik. A központ egy logikai egység az Azure Web PubSubban, ahol üzeneteket tehet közzé ügyfelek egy csoportjában.
A fő fogalmak az Azure Web PubSubban használt kifejezések részletes magyarázatát tartalmazzák.
A Web PubSub szolgáltatás JSON Web Token (JWT) hitelesítést használ. A mintakód a Web PubSub SDK használatával WebPubSubServiceClient.GetClientAccessUri() hoz létre egy URL-címet a szolgáltatásnak, amely érvényes hozzáférési jogkivonattal tartalmazza a teljes URL-címet.
A kapcsolat létrejötte után az ügyfél a WebSocket-kapcsolaton keresztül fogad üzeneteket. A használatával onMessage(String message) figyeli a bejövő üzeneteket.
Most, hogy egy ügyfél csatlakoztatta a Web PubSub-erőforrást, bármikor leküldhet üzeneteket egy alkalmazáskiszolgálóról a Web PubSub által biztosított kiszolgálói SDK-val.
Hozzon létre egy új projektkönyvtárat nevű publisher és telepítse a szükséges függőségeket
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
Hozzon létre egy publish.js fájlt az alábbi kóddal
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" });
A server.sendToAll() hívás üzenetet küld a központ összes csatlakoztatott ügyfelének.
A kapcsolati sztring lekérése
Fontos
A kapcsolati sztring a Web PubSub szolgáltatás eléréséhez szükséges engedélyezési adatokat tartalmazzák. A kapcsolati sztring belüli hozzáférési kulcs hasonló a szolgáltatás fő jelszavához.
Ebben a rövid útmutatóban Azure Portal alább látható módon fogjuk megkapni.
A kiszolgálóprogram futtatása
Futtassa az alábbi parancsokat egy új parancshéjban.
# Set the environment variable for your connection string.
export WebPubSubConnectionString="<Put your connection string here>"
node publish.js "Hello World"
A fogadott üzenetek megfigyelése az ügyféloldalon
Próbálja meg futtatni ugyanazt a "subscribe" programot több parancshéjban, hogy több ügyfelet ösztönözzen. A "közzétételi" program futtatása után látnia kell, hogy az üzenetek valós időben érkeznek az összes ügyfélnek.
Hozzon létre egy nevű publisher projektkönyvtárat, és telepítse a szükséges függőségeket:
mkdir publisher
cd publisher
dotnet new console
dotnet add package Azure.Messaging.WebPubSub
Cserélje le a Program.cs fájlt a következő kódra
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);
}
}
}
A SendToAllAsync() hívás üzenetet küld a központ összes csatlakoztatott ügyfelének.
A kiszolgálóprogram futtatása üzenetek leküldéséhez az összes csatlakoztatott ügyfélnek
$connection_string="<connection-string>"
dotnet run $connection_string "myHub1" "Hello World"
A fogadott üzenetek megfigyelése az ügyféloldalon
# 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 simluates 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
Először hozzon létre egy nevű publisher projektkönyvtárat, és telepítse a szükséges függőségeket:
mkdir publisher
cd publisher
# Create venv
python -m venv env
# Active venv
source ./env/bin/activate
pip install azure-messaging-webpubsubservice
Az Azure Web PubSub SDK használatával közzétehet egy üzenetet a szolgáltatásban. Hozzon létre egy publish.py fájlt az alábbi kóddal:
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)
Az send_to_all() üzenet küldése a központ összes csatlakoztatott ügyfélnek.
Ellenőrizze az előző parancshéjat, hogy az előfizető megkapta-e az üzenetet:
Received message: Hello World
Nyissa meg a pubsub könyvtárat. A Maven használatával hozzon létre egy közzétevői konzolalkalmazást webpubsub-quickstart-publisher , és nyissa meg a webpubsub-quickstart-publisher könyvtárat:
Az Azure Web PubSub SDK használatával közzétehet egy üzenetet a szolgáltatásban. Nyissa meg a /src/main/java/com/webpubsub/quickstart könyvtárat, nyissa meg az App.java fájlt a szerkesztőben, és cserélje le a tartalmat a következő kódra:
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);
}
}
A sendToAll() hívás üzenetet küld a központ összes csatlakoztatott ügyfélének.
Nyissa meg a webpubsub-quickstart-publisher könyvtárat, és futtassa a projektet a következő paranccsal:
Láthatja, hogy az előző előfizető a következő üzenetet kapta:
Message received: Hello World
Összefoglalás
Ez a rövid útmutató bemutatja, hogy milyen egyszerűen lehet üzeneteket leküldni egy alkalmazáskiszolgálóról egy központ összes csatlakoztatott ügyfelére. Emellett a Web PubSub lehetővé teszi az üzenetek leküldését a
a központi ügyfelek egy részhalmaza
egy adott csoport egy központban
egy csoport ügyfeleinek egy részhalmaza
Ezek az API-k számos használati esetet tesznek lehetővé, így a fejlesztők az egyedi üzleti logikára összpontosíthatnak, miközben meggyőződhetnek arról, hogy a Web PubSub alacsony késést (<100 ms), magas rendelkezésre állást és nagy léptékű (több millió egyidejű kapcsolatot) kínál.
Következő lépések
A következő lépésben megismerkedünk a Web PubSub eseményrendszerével, amely szükséges a teljes webalkalmazások létrehozásához.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ: https://aka.ms/ContentUserFeedback.
Visszajelzés küldése és megtekintése a következőhöz: