Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Klienti se připojují k podsítě Azure Web PubSub pomocí standardního protokolu WebSocket .
Koncové body služby
Služba Web PubSub poskytuje klientům dva typy koncových bodů pro připojení k:
/client/hubs/{hub}/client/?hub={hub}
{hub} je povinný parametr, který funguje jako izolace pro různé aplikace. Můžete to nastavit buď v cestě, nebo v parametru dotazu.
Autorizace
Klienti se připojují ke službě pomocí webového tokenu JSON (JWT). Token může být buď v řetězci dotazu, jako /client/?hub={hub}&access_token={token}nebo v hlavičce Authorization , jako Authorization: Bearer {token}.
Tady je obecný pracovní postup autorizace:
- Klient vyjedná s aplikačním serverem. Aplikační server obsahuje autorizační middleware, který zpracovává požadavek klienta a podepíše JWT, aby se klient připojil ke službě.
- Aplikační server vrátí JWT a adresu URL služby klientovi.
- Klient se pokusí připojit ke službě Web PubSub pomocí adresy URL a JWT vráceného z aplikačního serveru.
Podporovaná tvrzení
Při generování přístupového tokenu můžete také nakonfigurovat vlastnosti pro připojení klienta zadáním speciálních deklarací identity v JWT:
| Popis | Typ požadavku | Hodnota nároku | Poznámky |
|---|---|---|---|
Připojení userId klienta |
sub |
id uživatele | Je povolen pouze jeden sub nárok. |
| Životnost tokenu | exp |
čas vypršení platnosti | Deklarace exp identity (čas vypršení platnosti) identifikuje dobu vypršení platnosti, po které token nesmí být přijat ke zpracování. |
| Oprávnění, která má připojení klienta původně | role |
hodnota role definovaná v oprávněních | Zadejte více role položek, pokud má klient více oprávnění. |
| Počáteční skupiny, ke kterým se připojení klienta připojí po připojení ke službě Azure Web PubSub | webpubsub.group |
skupina, ke které se chcete připojit | Zadejte více webpubsub.group požadavků, pokud se klient připojí k více skupinám. |
Do přístupového tokenu můžete také přidat vlastní deklarace identity a tyto hodnoty se zachovají jako claims vlastnost v textu upstreamového požadavku.
Sady SDK serveru poskytují rozhraní API pro generování přístupového tokenu pro klienty.
Jednoduchý klient WebSocket
Jednoduchý WebSocket klient, jak naznačuje pojmenování, je jednoduché WebSocket připojení. Může mít také vlastní dílčí podprotokol.
V JavaScriptu můžete například vytvořit jednoduchého klienta WebSocket pomocí následujícího kódu:
// simple WebSocket client1
var client1 = new WebSocket('wss://test.webpubsub.azure.com/client/hubs/hub1');
// simple WebSocket client2 with some custom subprotocol
var client2 = new WebSocket('wss://test.webpubsub.azure.com/client/hubs/hub1', 'custom.subprotocol')
Jednoduchý klient WebSocket má dva režimy: sendEvent a sendToGroup. Režim je určen po navázání připojení a nelze ho později změnit.
sendEvent je výchozí režim pro jednoduchého klienta WebSocket. V sendEvent režimu se každý rámec Protokolu WebSocket, který klient odeslal, považuje za message událost. Uživatelé mohou nakonfigurovat obslužné rutiny událostí nebo naslouchací procesy událostí pro zpracování těchto message událostí.
// Every data frame is considered as a `message` event
var client3 = new WebSocket('wss://test.webpubsub.azure.com/client/hubs/hub1');
// Or explicitly set the mode
var client4 = new WebSocket('wss://test.webpubsub.azure.com/client/hubs/hub1?webpubsub_mode=sendEvent');
V sendToGroup režimu se každý datový rámec WebSocket odeslaný klientem považuje za zprávu, která se má publikovat do konkrétní skupiny.
group je povinný parametr dotazu v tomto režimu a je povolena pouze jedna hodnota. Připojení by také mělo mít odpovídající oprávnění k odesílání zpráv cílové skupině. Pro ni fungují obě role webpubsub.sendToGroup.<group> a webpubsub.sendToGroup.
V JavaScriptu můžete například vytvořit jednoduchého klienta WebSocket v sendToGroup režimu group=group1 pomocí následujícího kódu:
var client5 = new WebSocket('wss://test.webpubsub.azure.com/client/hubs/hub1?webpubsub_mode=sendToGroup&group=group1');
Klient PubSub WebSocket
PubSub WebSocket klient je WebSocket klient, který používá dílčí protokoly definované službou Azure Web PubSub.
json.webpubsub.azure.v1protobuf.webpubsub.azure.v1
S podprotokolem podporovaným službou může klientPubSub WebSocket přímo publikovat zprávy do skupin, když mají oprávnění.
Dílčí json.webpubsub.azure.v1 protokol
Podrobnosti o subprotokolu JSON najdete zde.
Vytvoření klienta PubSub WebSocket
var pubsubClient = new WebSocket('wss://test.webpubsub.azure.com/client/hubs/hub1', 'json.webpubsub.azure.v1');
Přímé připojení ke skupině z klienta
let ackId = 0;
pubsubClient.send(
JSON.stringify({
type: 'joinGroup',
group: 'group1',
ackId: ++ackId
}));
Přímé odesílání zpráv do skupiny z klienta
let ackId = 0;
pubsubClient.send(
JSON.stringify({
type: 'sendToGroup',
group: 'group1',
ackId: ++ackId,
dataType: "json",
data: {
"hello": "world"
}
}));
Dílčí protobuf.webpubsub.azure.v1 subprotokol
Protocol buffers (protobuf) je jazykově neutrální, platformně neutrální, binární protokol, který zjednodušuje odesílání binárních dat. Protobuf poskytuje nástroje pro generování klientů pro mnoho jazyků, jako je Java, Python, Objective-C, C# a C++. Přečtěte si další informace o protobuf.
Například v JavaScriptu můžete vytvořit klienta PubSub WebSocket s protobuf subprotocol pomocí následujícího kódu:
// PubSub WebSocket client
var pubsub = new WebSocket('wss://test.webpubsub.azure.com/client/hubs/hub1', 'protobuf.webpubsub.azure.v1');
Podrobnosti najdete v dílčím protokolu protobuf.
Odpověď AckId a Ack
Klient PubSub WebSocket podporuje ackId vlastnost pro joinGroup, leaveGroup, sendToGroup a event zprávy. Při použití ackId můžete obdržet zprávu s potvrzením při zpracování vašeho požadavku. Můžete se rozhodnout vynechat ackId ve scénářích bez nutnosti dalšího zásahu. V článku popisujeme rozdíly v chování mezi určením ackId nebo ne.
Chování v případě, že není zadáno ackId
Pokud ackId není zadaný, zapomeňte na to. I při zprostředkování zpráv existují chyby, nemáte způsob, jak dostávat oznámení.
Chování při zadání ackId
Idempotentní publikování
ackId je číslo uint64 a mělo by být jedinečné v rámci klienta se stejným ID připojení. Služba Web PubSub zaznamenává ackId, přičemž zprávy se stejným ackId jsou považovány za stejné. Služba odmítá zprostředkovat stejnou zprávu více než jednou, což je užitečné při opakování, aby se zabránilo duplicitním zprávám. Pokud například klient odešle zprávu s ackId=5 a neobdrží potvrzovací odpověď typu ack pomocí ackId=5, klient se pokusí znovu odeslat stejnou zprávu. V některých případech je zpráva zprostředkovaná a potvrzovací odpověď se z nějakého důvodu ztratí. Služba odmítne opakování a odpoví na odpověď typu ack s odůvodněním Duplicate .
Odpověď Ack
Služba Web PubSub odesílá potvrzující odpověď pro každý požadavek s ackId.
Formát:
{
"type": "ack",
"ackId": 1, // The ack id for the request to ack
"success": false, // true or false
"error": {
"name": "Forbidden|InternalServerError|Duplicate",
"message": "<error_detail>"
}
}
ackIdpřidruží žádost.successje logická hodnota a označuje, jestli je požadavek úspěšně zpracován službou. Pokud jefalse, klienti musí zkontrolovaterror.errorexistuje pouze tehdy, kdyžsuccessjefalsea klienti by měli mít jinou logiku pro různéname. Měli byste předpokládat, že v budoucnu může být více typůname.-
Forbidden: Klient nemá oprávnění k žádosti. Relevantní role musí být přidány klientovi. -
InternalServerError: Ve službě došlo k nějaké vnitřní chybě. Vyžaduje se opakování. -
Duplicate: Služba již zpracovala zprávu se stejnouackId.
-
Oprávnění
Jak jste si pravděpodobně všimli v dřívějším popisu klienta WebSocket PubSub, klient může publikovat do jiných klientů pouze tehdy, když je k tomu autorizovaný. Oprávnění klientovi lze udělit, když je připojen, nebo v průběhu trvání připojení.
| Role | Oprávnění |
|---|---|
| Neurčeno | Klient může odesílat žádosti o události. |
webpubsub.joinLeaveGroup |
Klient se může připojit nebo opustit libovolnou skupinu. |
webpubsub.sendToGroup |
Klient může publikovat zprávy do libovolné skupiny. |
webpubsub.joinLeaveGroup.<group> |
Klient se může připojit nebo opustit skupinu <group>. |
webpubsub.sendToGroup.<group> |
Klient může publikovat zprávy do skupiny <group>. |
Oprávnění klienta lze udělit několika způsoby:
1. Přiřaďte roli klientovi při generování přístupového tokenu.
Klient se může ke službě připojit pomocí JWT. Datová část tokenu může obsahovat informace, jako role klienta. Při podepisování JWT klientovi můžete udělit oprávnění klientovi tím, že klientovi udělíte konkrétní role.
Pojďme například podepsat JWT, který má oprávnění odesílat zprávy do group1 a group2:
let token = await serviceClient.getClientAccessToken({
roles: [ "webpubsub.sendToGroup.group1", "webpubsub.sendToGroup.group2" ]
});
2. Přiřaďte roli klientovi pomocí událostní obslužné rutiny connect.
Role klientů lze také nastavit při registraci obslužné rutiny události connect a nadřazená obslužná rutina události může při zpracování událostí connect vrátit roles klienta do služby Web PubSub.
Například v JavaScriptu handleConnect můžete událost nakonfigurovat tak, aby:
let handler = new WebPubSubEventHandler("hub1", {
handleConnect: (req, res) => {
// auth the connection and set the userId of the connection
res.success({
roles: [ "webpubsub.sendToGroup.group1", "webpubsub.sendToGroup.group2" ]
});
},
});
3. Přiřaďte roli klientovi prostřednictvím rozhraní REST API nebo serverového SDK za chodu.
let service = new WebPubSubServiceClient("<your_connection_string>", "test-hub");
await service.grantPermission("<connection_id>", "joinLeaveGroup", { targetName: "group1" });
Další kroky
Pomocí těchto prostředků můžete začít vytvářet vlastní aplikaci: