Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
JSON WebSocket-delprotokol json.webpubsub.azure.v1, , möjliggör utbyte av publicera/prenumerera meddelanden mellan klienter via tjänsten utan en tur och retur till den överordnade servern. En WebSocket-anslutning med hjälp av delprotokolen json.webpubsub.azure.v1 kallas för en PubSub WebSocket-klient.
Översikt
En enkel WebSocket-anslutning utlöser en message händelse när den skickar meddelanden och förlitar sig på serversidan för att bearbeta meddelanden och utföra andra åtgärder.
Med subprotokolen json.webpubsub.azure.v1 kan du skapa PubSub WebSocket-klienter som kan:
- gå med i en grupp med hjälp av anslutningsbegäranden.
- publicera meddelanden direkt till en grupp med publiceringsbegäranden.
- dirigera meddelanden till olika överordnade händelsehanterare med hjälp av händelsebegäranden.
Du kan till exempel skapa en PubSub WebSocket-klient med följande JavaScript-kod:
// PubSub WebSocket client
var pubsub = new WebSocket('wss://test.webpubsub.azure.com/client/hubs/hub1', 'json.webpubsub.azure.v1');
I det här dokumentet beskrivs undergruppsbegäranden json.webpubsub.azure.v1 och svar. Både inkommande och utgående dataramar måste innehålla JSON-nyttolaster.
Behörigheter
En PubSub WebSocket-klient kan bara publicera till andra klienter när den är auktoriserad. Den roles tilldelade klienten avgör vilka behörigheter som beviljats klienten:
| Roll | Behörighet |
|---|---|
| Har inte angetts | Klienten kan skicka händelsebegäranden. |
webpubsub.joinLeaveGroup |
Klienten kan ansluta/lämna valfri grupp. |
webpubsub.sendToGroup |
Klienten kan publicera meddelanden till valfri grupp. |
webpubsub.joinLeaveGroup.<group> |
Klienten kan ansluta/lämna gruppen <group>. |
webpubsub.sendToGroup.<group> |
Klienten kan publicera meddelanden till gruppen <group>. |
Servern kan dynamiskt bevilja eller återkalla klientbehörigheter via REST-API:er eller server-SDK:er.
begäranden
Koppla grupper
Format:
{
"type": "joinGroup",
"group": "<group_name>",
"ackId" : 1
}
-
ackIdär identiteten för varje begäran och bör vara unik. Tjänsten skickar ett ack-svarsmeddelande för att meddela processresultatet för begäran. Mer information finns i AckId och Ack-svar
Lämna grupper
Format:
{
"type": "leaveGroup",
"group": "<group_name>",
"ackId" : 1
}
-
ackIdär identiteten för varje begäran och bör vara unik. Tjänsten skickar ett ack-svarsmeddelande för att meddela processresultatet för begäran. Mer information finns i AckId och Ack-svar
Publicera meddelanden
Format:
{
"type": "sendToGroup",
"group": "<group_name>",
"ackId" : 1,
"noEcho": true|false,
"dataType" : "json|text|binary",
"data": {}, // data can be string or valid json token depending on the dataType
}
-
ackIdär identiteten för varje begäran och bör vara unik. Tjänsten skickar ett ack-svarsmeddelande för att meddela processresultatet för begäran. Mer information finns i AckId och Ack-svar -
noEchoär valfritt. Om värdet är true upprepas inte det här meddelandet till samma anslutning. Om det inte anges är standardvärdet falskt. -
dataTypekan anges tilljson,textellerbinary:-
json:datakan vara vilken typ som helst som JSON stöder och publiceras som vad det är. OmdataTypeinte har angetts är standardvärdetjson. -
text:dataska vara i strängformat och strängdata publiceras. -
binary:databör vara i base64-format och binära data publiceras.
-
Fall 1: Publicera textdata:
{
"type": "sendToGroup",
"group": "<group_name>",
"dataType" : "text",
"data": "text data",
"ackId": 1
}
- De subprotokolklienter som finns i
<group_name>tar emot:
{
"type": "message",
"from": "group",
"group": "<group_name>",
"dataType" : "text",
"data" : "text data"
}
- De enkla WebSocket-klienterna i
<group_name>tar emot strängentext data.
Fall 2: Publicera JSON-data:
{
"type": "sendToGroup",
"group": "<group_name>",
"dataType" : "json",
"data": {
"hello": "world"
}
}
- De subprotokolklienter som finns i
<group_name>tar emot:
{
"type": "message",
"from": "group",
"group": "<group_name>",
"dataType" : "json",
"data" : {
"hello": "world"
}
}
- De enkla WebSocket-klienterna i
<group_name>tar emot den serialiserade strängen{"hello": "world"}.
Fall 3: Publicera binära data:
{
"type": "sendToGroup",
"group": "<group_name>",
"dataType" : "binary",
"data": "<base64_binary>",
"ackId": 1
}
- De subprotokolklienter som finns i
<group_name>tar emot:
{
"type": "message",
"from": "group",
"group": "<group_name>",
"dataType" : "binary",
"data" : "<base64_binary>",
}
- De enkla WebSocket-klienterna i
<group_name>tar emot binära data i den binära ramen.
Skicka anpassade händelser
Format:
{
"type": "event",
"event": "<event_name>",
"ackId": 1,
"dataType" : "json|text|binary",
"data": {}, // data can be string or valid json token depending on the dataType
}
-
ackIdär identiteten för varje begäran och bör vara unik. Tjänsten skickar ett ack-svarsmeddelande för att meddela processresultatet för begäran. Mer information finns i AckId och Ack-svar
dataType kan vara en av text, binaryeller json:
-
json: data kan vara alla typer av json-stöd och publiceras som vad de är. Standardvärdet ärjson. -
text: data är i strängformat och strängdata publiceras. -
binary: data är i base64-format och binära data publiceras.
Fall 1: Skicka händelse med textdata:
{
"type": "event",
"event": "<event_name>",
"ackId": 1,
"dataType" : "text",
"data": "text data",
}
Den överordnade händelsehanteraren tar emot data som liknar:
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: text/plain
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.user.<event_name>
ce-source: /client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub_name}
ce-eventName: <event_name>
text data
Content-Type HTTP-begäran för CloudEvents är när dataType är text/plaintext.
Fall 2: Skicka händelse med JSON-data:
{
"type": "event",
"event": "<event_name>",
"ackId": 1,
"dataType" : "json",
"data": {
"hello": "world"
},
}
Den överordnade händelsehanteraren tar emot data som liknar:
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/json
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.user.<event_name>
ce-source: /client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub_name}
ce-eventName: <event_name>
{
"hello": "world"
}
Content-Type HTTP-begäran för CloudEvents är när dataType är application/jsonjson
Fall 3: Skicka händelse med binära data:
{
"type": "event",
"event": "<event_name>",
"ackId": 1,
"dataType" : "binary",
"data": "base64_binary",
}
Den överordnade händelsehanteraren tar emot data som liknar:
POST /upstream HTTP/1.1
Host: xxxxxx
WebHook-Request-Origin: xxx.webpubsub.azure.com
Content-Type: application/octet-stream
Content-Length: nnnn
ce-specversion: 1.0
ce-type: azure.webpubsub.user.<event_name>
ce-source: /client/{connectionId}
ce-id: {eventId}
ce-time: 2021-01-01T00:00:00Z
ce-signature: sha256={connection-id-hash-primary},sha256={connection-id-hash-secondary}
ce-userId: {userId}
ce-connectionId: {connectionId}
ce-hub: {hub_name}
ce-eventName: <event_name>
binary
Content-Type HTTP-begäran för CloudEvents är när dataType är application/octet-streambinary. WebSocket-ramen kan vara text formaterad för textmeddelanderamar eller UTF8-kodade binärfiler för binary meddelanderamar.
Web PubSub-tjänsten nekar klienten om meddelandet inte matchar det beskrivna formatet.
Ping
Format:
{
"type": "ping",
}
Klienten kan skicka ett ping meddelande till tjänsten för att göra det möjligt för Web PubSub-tjänsten att identifiera klientens livskraft.
Svar
Meddelandetyper som tas emot av klienten kan vara:
- ack – Svaret på en begäran som innehåller en
ackId. - message – Meddelanden från gruppen eller servern.
- system – Meddelanden från Web PubSub-tjänsten.
- pong – Svaret på ett
pingmeddelande.
Ack-svar
När klientbegäran innehåller returnerar ackIdtjänsten ett ack-svar för begäran. Klienten ska hantera ack-mekanismen genom att vänta på ack-svaret med en asyncawait åtgärd och använda en timeout-åtgärd när ack-svaret inte tas emot under en viss period.
Format:
{
"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>"
}
}
Klientimplementeringen SKA alltid kontrollera om success är true eller false först och sedan bara läsa felet när success är false.
Meddelandesvar
Klienter kan ta emot meddelanden som publicerats från en grupp som klienten har anslutit eller från servern, som i en serverhanteringsroll skickar meddelanden till specifika klienter eller användare.
När meddelandet kommer från en grupp
{ "type": "message", "from": "group", "group": "<group_name>", "dataType": "json|text|binary", "data" : {} // The data format is based on the dataType "fromUserId": "abc" }När meddelandet kommer från servern.
{ "type": "message", "from": "server", "dataType": "json|text|binary", "data" : {} // The data format is based on the dataType }
Fall 1: Skicka data Hello World till anslutningen via REST API med Content-Type=text/plain
En enkel WebSocket-klient tar emot en WebSocket-textram med data:
Hello World;En PubSub WebSocket-klient tar emot:
{ "type": "message", "from": "server", "dataType" : "text", "data": "Hello World", }
Fall 2: Skicka data { "Hello" : "World"} till anslutningen via REST API med Content-Type=application/json
En enkel WebSocket-klient tar emot en WebSocket-textram med strängifierade data:
{ "Hello" : "World"}.En PubSub WebSocket-klient tar emot:
{ "type": "message", "from": "server", "dataType" : "json", "data": { "Hello": "World" } }
Om REST-API:et skickar en sträng Hello World med hjälp av application/json innehållstypen får den enkla WebSocket-klienten en JSON-sträng, som är "Hello World" omsluten med dubbla citattecken (").
Fall 3: Skicka binära data till anslutningen via REST API med Content-Type=application/octet-stream
En enkel WebSocket-klient tar emot en binär WebSocket-ram med binära data.
En PubSub WebSocket-klient tar emot:
{ "type": "message", "from": "server", "dataType" : "binary", "data": "<base64_binary>" }
Systemsvar
Tjänsten Web PubSub skickar systemrelaterade meddelanden till klienter.
Pong-svar
Tjänsten Web PubSub skickar ett pong meddelande till klienten när den tar emot ett ping meddelande från klienten.
Format:
{
"type": "pong",
}
Connected
Meddelandet som skickas till klienten när klienten ansluter:
{
"type": "system",
"event": "connected",
"userId": "user1",
"connectionId": "abcdefghijklmnop",
}
Frånkopplad
Meddelandet som skickas till klienten när servern stänger anslutningen eller när tjänsten nekar klienten.
{
"type": "system",
"event": "disconnected",
"message": "reason"
}
Nästa steg
Använd dessa resurser för att börja skapa ett eget program: