Web PubSub ügyfélkódtár JavaScripthez
Az Azure Web PubSub egy felhőalapú szolgáltatás, amellyel a fejlesztők egyszerűen valós idejű funkciókat hozhatnak létre webalkalmazásokban közzétételi-feliratkozási mintákkal nagy méretekben.
Minden olyan forgatókönyv, amely valós idejű üzenetküldést igényel a kiszolgáló és az ügyfelek között, vagy az ügyfelek között közzétételi-feliratkozási mintákat követve, előnyös lehet a Web PubSub használata. A fejlesztőknek többé nem kell lekérdezni a kiszolgálót úgy, hogy időközönként ismétlődő HTTP-kéréseket küldenek, ami pazarló és nehezen méretezhető.
Az alábbi ábrán látható módon az ügyfelek WebSocket-kapcsolatokat létesítenek a Web PubSub-erőforrással. Ez az ügyfélkódtár:
- leegyszerűsíti az ügyfélkapcsolatok kezelését
- leegyszerűsíti az üzenetek küldését az ügyfelek között
- automatikus újrapróbálkozás az ügyfélkapcsolat nem szándékos megszakadása után
- megbízhatóan kézbesíti az üzeneteket számban és sorrendben a kapcsolat megszakadása után
Az itt használt kifejezések részleteit a fő fogalmak szakasz ismerteti.
Ez a kódtár az NPM-en található.
Első lépések
Jelenleg támogatott környezetek
Előfeltételek
1. A csomag telepítése @azure/web-pubsub-client
npm install @azure/web-pubsub-client
2. Csatlakozás a Web PubSub-erőforráshoz
Az ügyfél ügyfél-hozzáférési URL-címet használ a szolgáltatáshoz való csatlakozáshoz és hitelesítéshez, amely 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élelérési URL-címet. Ebben a rövid útmutatóban az alábbiakban látható azure portalról másolhat és illeszthet be egyet. (Éles környezetben az ügyfelek általában az ügyfélelérési URL-címet kapják meg az alkalmazáskiszolgálón. Lásd alább a részleteket )
Ahogy a fenti ábrán látható, az ügyfél jogosult üzeneteket küldeni és csatlakozni egy "group1" nevű csoporthoz.
// Imports the client libray
const { WebPubSubClient } = require("@azure/web-pubsub-client");
// Instantiates the client object
const client = new WebPubSubClient("<client-access-url>");
// Starts the client connection with your Web PubSub resource
await client.start();
// ...
// The client can join/leave groups, send/receive messages to and from those groups all in real-time
3. Csatlakozás csoportokhoz
Vegye figyelembe, hogy az ügyfél csak azoktól a csoportoktól fogadhat üzeneteket, amelyekhez csatlakozott, és visszahívást kell hozzáadnia az üzenetek fogadásának logikájának megadásához.
// ...continues the code snippet from above
// Specifies the group to join
let groupName = "group1";
// Registers a listener for the event 'group-message' early before joining a group to not miss messages
client.on("group-message", (e) => {
console.log(`Received message: ${e.message.data}`);
});
// A client needs to join the group it wishes to receive messages from
await client.joinGroup(groupName);
4. Üzenetek küldése csoportnak
// ...continues the code snippet from above
// Send a message to a joined group
await client.sendToGroup(groupName, "hello world", "text");
// In the Console tab of your developer tools found in your browser, you should see the message printed there.
Példák
Visszahívások hozzáadása csatlakoztatott, leválasztott és leállított eseményekhez
- Ha egy ügyfél sikeresen csatlakozik a Web PubSub-erőforráshoz, az
connected
esemény aktiválódik.
client.on("connected", (e) => {
console.log(`Connection ${e.connectionId} is connected.`);
});
- Ha egy ügyfél kapcsolata megszakad, és nem sikerül helyreállítani a kapcsolatot, az
disconnected
esemény aktiválódik.
client.on("disconnected", (e) => {
console.log(`Connection disconnected: ${e.message}`);
});
- Az
stopped
esemény akkor aktiválódik, ha az ügyfél kapcsolata megszakad, és az ügyfél nem próbál újracsatlakozni. Ez általában akkor fordul elő, ha aclient.stop()
rendszer meghívja vagy letiltja,autoReconnect
vagy elérte az újracsatlakozási kísérlet megadott korlátját. Ha újra szeretné indítani az ügyfelet, meghívhatjaclient.start()
a leállított eseményt.
// Registers a listener for the "stopped" event
client.on("stopped", () => {
console.log(`Client has stopped`);
});
Ügyfélelérési URL-cím programozott módon történő létrehozása egyeztetési kiszolgáló használatával
Éles környezetben az ügyfelek általában lekérik az ügyfélelérési URL-címet egy alkalmazáskiszolgálóról. A kiszolgáló a web PubSub-erőforráshoz tartozó kapcsolati karakterlánc tárolja, és létrehozza az ügyfélelérési URL-címet a kiszolgálókódtár @azure/web-pubsub
segítségével.
1. Alkalmazáskiszolgáló
Az alábbi kódrészlet egy példa arra, hogy egy alkalmazáskiszolgáló elérhetővé tesz egy /negotiate
elérési utat, és visszaadja az ügyfélelérési URL-címet.
// This code snippet uses the popular Express framework
const express = require('express');
const app = express();
const port = 8080;
// Imports the server library, which is different from the client library
const { WebPubSubServiceClient } = require('@azure/web-pubsub');
const hubName = 'sample_chat';
const serviceClient = new WebPubSubServiceClient("<web-pubsub-connectionstring>", hubName);
// Note that the token allows the client to join and send messages to any groups. It is specified with the "roles" option.
app.get('/negotiate', async (req, res) => {
let token = await serviceClient.getClientAccessToken({roles: ["webpubsub.joinLeaveGroup", "webpubsub.sendToGroup"] });
res.json({
url: token.url
});
});
app.listen(port, () => console.log(`Application server listening at http://localhost:${port}/negotiate`));
2. Ügyféloldal
Az alábbi kódrészlet az ügyféloldalra mutat példát.
const { WebPubSubClient } = require("@azure/web-pubsub-client")
const client = new WebPubSubClient({
getClientAccessUrl: async () => {
let value = await (await fetch(`/negotiate`)).json();
return value.url;
}
});
await client.start();
A minta teljes kódjának megtekintéséhez tekintse meg a samples-browser webhelyet.
Az ügyfél üzeneteket használ fel az alkalmazáskiszolgálóról vagy a csatlakoztatott csoportokból
Az ügyfél visszahívásokat adhat hozzá az alkalmazáskiszolgáló vagy -csoportok üzeneteinek felhasználásához. Felhívjuk a figyelmét arra az group-message
esetre, ha az ügyfél csak olyan csoportos üzeneteket fogadhat, amelyekhez csatlakozott.
// Registers a listener for the "server-message". The callback will be invoked when your application server sends message to the connectionID, to or broadcast to all connections.
client.on("server-message", (e) => {
console.log(`Received message ${e.message.data}`);
});
// Registers a listener for the "group-message". The callback will be invoked when the client receives a message from the groups it has joined.
client.on("group-message", (e) => {
console.log(`Received message from ${e.message.group}: ${e.message.data}`);
});
Újracsatlakozás sikertelenségének kezelése
Ha egy ügyfél kapcsolata megszakad, és nem áll helyre, az összes csoportkörnyezet törlődik a Web PubSub-erőforrásban. Ez azt jelenti, hogy amikor az ügyfél újra csatlakozik, újra csatlakoznia kell a csoportokhoz. Alapértelmezés szerint az ügyfélen engedélyezve van a autoRejoinGroup
beállítás.
Azonban tisztában kell lennie a autoRejoinGroup
korlátozásokkal.
- Az ügyfél csak olyan csoportokat tud újracsatlakozni, amelyekhez eredetileg az ügyfélkód csatlakozott , a kiszolgálóoldali kód nem.
- Az "újracsatlakozási csoport" műveletek különböző okokból meghiúsulhatnak, például az ügyfél nem rendelkezik engedéllyel a csoportokhoz való csatlakozáshoz. Ilyen esetekben visszahívást kell hozzáadnia a hiba kezeléséhez.
// By default autoRejoinGroups=true. You can disable it by setting to false.
const client = new WebPubSubClient("<client-access-url>", { autoRejoinGroups: true });
// Registers a listener to handle "rejoin-group-failed" event
client.on("rejoin-group-failed", e => {
console.log(`Rejoin group ${e.group} failed: ${e.error}`);
})
Művelet és újrapróbálkozás
Alapértelmezés szerint a , , client.sendToGroup()
client.sendEvent()
művelet client.joinGroup()
client.leaveGroup()
három újrapróbálkozással rendelkezik. A konfigurálást a következőn keresztül végezheti messageRetryOptions
el: . Ha az összes újrapróbálkozás meghiúsult, a rendszer hibát jelez. Az újrapróbálkozást a korábbi újrapróbálkozásokéval megegyező ackId
módon végezheti el, hogy a Web PubSub szolgáltatás deduplikálja a műveletet.
try {
await client.joinGroup(groupName);
} catch (err) {
let id = null;
if (err instanceof SendMessageError) {
id = err.ackId;
}
await client.joinGroup(groupName, {ackId: id});
}
Alprotocol megadása
Módosíthatja az alprotocolt, hogy az ügyfél használhassa. Alapértelmezés szerint az ügyfél a következőt használja json.reliable.webpubsub.azure.v1
: . Választhatja a vagy json.webpubsub.azure.v1
a használatátjson.reliable.webpubsub.azure.v1
.
// Change to use json.webpubsub.azure.v1
const client = new WebPubSubClient("<client-access-url>", { protocol: WebPubSubJsonProtocol() });
// Change to use json.reliable.webpubsub.azure.v1
const client = new WebPubSubClient("<client-access-url>", { protocol: WebPubSubJsonReliableProtocol() });
Fő fogalmak
Kapcsolat
A kapcsolat( más néven ügyfél- vagy ügyfélkapcsolat) a Web PubSubhoz csatlakoztatott egyéni WebSocket-kapcsolatot jelöli. Sikeres csatlakozás esetén a Web PubSub egyedi kapcsolatazonosítót rendel ehhez a kapcsolathoz. Mindegyik WebPubSubClient
létrehozza a saját kizárólagos kapcsolatát.
Helyreállítási
Ha egy megbízható protokollt használó ügyfél megszakad, egy új WebSocket megpróbálja létrehozni az elveszett kapcsolat kapcsolatazonosítóját. Ha az új WebSocket-kapcsolat sikeresen csatlakozik, a kapcsolat helyreáll. Az ügyfél leválasztásakor a szolgáltatás megőrzi az ügyfél környezetét, valamint az összes olyan üzenetet, amelyre az ügyfél előfizetett, és amikor az ügyfél helyreáll, a szolgáltatás elküldi ezeket az üzeneteket az ügyfélnek. Ha a szolgáltatás WebSocket hibakódot 1008
ad vissza, vagy a helyreállítási kísérlet több mint 30 másodpercig tart, a helyreállítás sikertelen lesz.
Újracsatlakozás
Az újracsatlakozás akkor történik, ha az ügyfélkapcsolat megszakad, és nem áll helyre. Az újracsatlakozás új kapcsolatot indít el, és az új kapcsolat új kapcsolatazonosítóval rendelkezik. A helyreállítással ellentétben a szolgáltatás az újracsatlakoztatott ügyfelet új ügyfélkapcsolatként kezeli. Az ügyfélkapcsolatnak újra csatlakoznia kell a csoportokhoz. Alapértelmezés szerint az ügyfélkódtár újracsatlakozik a csoportokhoz az újracsatlakozás után.
Hub
A központ egy logikai fogalom az ügyfélkapcsolatok halmazához. Általában egy központot használ egy célra, például egy csevegőközpontot vagy egy értesítési központot. Az ügyfélkapcsolat létrehozásakor csatlakozik egy központhoz, és annak élettartama alatt az adott központhoz tartozik. A különböző alkalmazások különböző központnevek használatával oszthatnak meg egy Web PubSub-t.
Group
A csoport a központtal létesített kapcsolatok részhalmaza. Bármikor hozzáadhat ügyfélkapcsolatot egy csoporthoz, vagy bármikor eltávolíthatja az ügyfélkapcsolatot a csoportból. Ha például egy ügyfél csatlakozik egy csevegőszobához, vagy amikor egy ügyfél elhagyja a csevegőszobát, ez a csevegőszoba csoportnak tekinthető. Az ügyfelek több csoporthoz is csatlakozhatnak, és egy csoport több ügyfelet is tartalmazhat.
Felhasználó
Connections a Web PubSub egy felhasználóhoz tartozhat. A felhasználók több kapcsolattal is rendelkezhetnek, például ha egyetlen felhasználó több eszközön vagy több böngészőlapon csatlakozik.
Ügyfélélettartam
A Web PubSub-ügyfelek mindegyike biztonságosan gyorsítótárazható, és egyetlentonként használható az alkalmazás teljes élettartama alatt. A regisztrált eseményvisszahívások ugyanazt az élettartamot osztják meg az ügyféllel. Ez azt jelenti, hogy bármikor hozzáadhat vagy eltávolíthat visszahívásokat, és a regisztrációs állapot nem változik az újracsatlakozás vagy az ügyfél leállítása után.
JavaScript-csomag
Ahhoz, hogy ezt az ügyfélkódtárat a böngészőben használhassa, először egy kötegelőt kell használnia. Ennek részleteiért tekintse meg a csomagküldő dokumentációt.
Hibaelhárítás
Naplók engedélyezése
A kódtár használatakor a következő környezeti változót állíthatja be a hibakeresési naplók lekéréséhez.
export AZURE_LOG_LEVEL=verbose
A naplók engedélyezésére vonatkozó részletesebb útmutatásért tekintse meg a @azure/logger csomag dokumentációt.
Élő nyomkövetés
Az élő forgalom megtekintéséhez használja a Web PubSub portál élő nyomkövetési eszközét .
További források
További információ az ügyfélengedélyekről, lásd az engedélyeket
Közreműködés
Ha hozzá szeretne járulni ehhez a kódtárhoz, olvassa el a közreműködői útmutatót , amelyből többet is megtudhat a kód összeállításáról és teszteléséről.
Azure SDK for JavaScript
Visszajelzés
https://aka.ms/ContentUserFeedback.
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ó:Visszajelzés küldése és megtekintése a következőhöz: