Internetowy zestaw SDK po stronie klienta PubSub dla języka JavaScript
Uwaga
Szczegółowe informacje na temat terminów używanych w tym miejscu opisano w artykule dotyczącym kluczowych pojęć.
Zestaw SDK po stronie klienta ma na celu przyspieszenie przepływu pracy dewelopera; w szczególności,
- upraszcza zarządzanie połączeniami klientów
- upraszcza wysyłanie komunikatów między klientami
- automatyczne ponawianie próby po niezamierzonych spadkach połączenia klienta
- niezawodne dostarczanie komunikatów o numerze i w kolejności po odzyskaniu po spadku połączenia
Jak pokazano na diagramie, klienci ustanawiają połączenia protokołu WebSocket z zasobem Web PubSub.
Wprowadzenie
Wymagania wstępne
- Wersje LTS środowiska Node.js
- Subskrypcja platformy Azure
- Zasób Web PubSub
1. Zainstaluj @azure/web-pubsub-client
pakiet
npm install @azure/web-pubsub-client
2. Połączenie za pomocą zasobu Web PubSub
Klient używa Client Access URL
polecenia do nawiązywania połączenia i uwierzytelniania z usługą, która jest zgodna ze wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>
wzorcem . Klient może mieć kilka sposobów uzyskania Client Access URL
. W tym przewodniku szybkim możesz skopiować i wkleić go z wyświetlonej witryny Azure Portal. (W przypadku środowiska produkcyjnego klienci zazwyczaj są Client Access URL
generowane na serwerze aplikacji. Zobacz szczegóły )
Jak pokazano na diagramie, klient ma uprawnienia do wysyłania komunikatów do określonej grupy o nazwie group1
.
// 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. Dołącz do grup
Klient może odbierać komunikaty tylko z grup, do których dołączył. Możesz dodać wywołanie zwrotne, aby określić logikę tego, co należy zrobić podczas odbierania komunikatów.
// ...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. Wysyłanie komunikatów do grupy
// ...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.
Przykłady
Obsługa connected
zdarzeń i disconnected
stopped
Usługa Azure Web PubSub uruchamia zdarzenia systemowe, takie jak connected
, disconnected
i stopped
. Możesz zarejestrować programy obsługi zdarzeń, aby zdecydować, co program powinien zrobić po wyzwoleniu zdarzeń.
- Po pomyślnym połączeniu klienta z zasobem
connected
Web PubSub zdarzenie jest wyzwalane. Ten fragment kodu po prostu wyświetla identyfikator połączenia
client.on("connected", (e) => {
console.log(`Connection ${e.connectionId} is connected.`);
});
- Gdy klient jest odłączony i nie może odzyskać połączenia,
disconnected
zdarzenie jest wyzwalane. Ten fragment kodu po prostu wyświetla komunikat.
client.on("disconnected", (e) => {
console.log(`Connection disconnected: ${e.message}`);
});
- Zdarzenie
stopped
jest wyzwalane po rozłączeniu klienta, a klient przestaje próbować ponownie nawiązać połączenie. Zwykle dzieje się tak po wywołaniuclient.stop()
metody lubautoReconnect
jest wyłączona lub osiągnięto określony limit próby ponownego nawiązania połączenia. Jeśli chcesz ponownie uruchomić klienta, możesz wywołaćclient.start()
wywołanie zdarzenia zatrzymane.
// Registers an event handler for the "stopped" event
client.on("stopped", () => {
console.log(`Client has stopped`);
});
Programowe generowanie Client Access URL
przy użyciu serwera aplikacji
W środowisku produkcyjnym klienci zwykle pobierają Client Access URL
z serwera aplikacji. Serwer przechowuje connection string
element do zasobu Web PubSub i generuje element Client Access URL
z pomocą biblioteki @azure/web-pubsub
po stronie serwera .
1. Serwer aplikacji
Fragment kodu jest przykładem serwera aplikacji, który uwidacznia /negotiate
punkt końcowy i zwraca wartość Client Access URL
.
// 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. Po stronie klienta
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();
Uwaga
Aby wyświetlić pełny kod tego przykładu, zapoznaj się z tematem samples-browser.
Klient korzysta z komunikatów z serwera aplikacji lub grup przyłączonych
Klient może dodawać wywołania zwrotne w celu korzystania z komunikatów z serwera aplikacji lub grup.
// Registers a listener for the "server-message". The callback is 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 is 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}`);
});
Uwaga
W przypadku group-message
zdarzenia klient może odbierać komunikaty tylko z grup, do których dołączył.
Niepowodzenie ponownego dołączania
Gdy klient jest odłączony i nie można go odzyskać, wszystkie konteksty grupy są czyszczone w zasobie Web PubSub. Oznacza to, że po ponownym nawiązaniu połączenia klient musi ponownie połączyć się z grupami. Domyślnie klient ma autoRejoinGroup
włączoną opcję.
Należy jednak pamiętać o autoRejoinGroup
ograniczeniach.
- Klient może ponownie dołączyć tylko grupy, które zostały przyłączone przez kod klienta, a nie przez kod po stronie serwera.
- Operacje ponownego dołączania grupy mogą zakończyć się niepowodzeniem z różnych powodów, na przykład klient nie ma uprawnień do dołączania do grup. W takich przypadkach należy dodać wywołanie zwrotne w celu obsługi tego błędu.
// 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}`);
})
Ponów próbę
Domyślnie operacja taka jak client.joinGroup()
, client.leaveGroup()
, client.sendToGroup()
client.sendEvent()
ma trzy ponawiania prób. Konfigurację można skonfigurować za pomocą .messageRetryOptions
Jeśli wszystkie ponowne próby nie powiodły się, zostanie zgłoszony błąd. Ponów próbę można zachować, przekazując te same ackId
próby co poprzednie ponawianie prób, aby usługa Web PubSub mogła deduplikować operację.
try {
await client.joinGroup(groupName);
} catch (err) {
let id = null;
if (err instanceof SendMessageError) {
id = err.ackId;
}
await client.joinGroup(groupName, {ackId: id});
}
Pakiet JavaScript
Aby użyć tej biblioteki klienta w przeglądarce, należy użyć narzędzia bundler. Aby uzyskać szczegółowe informacje na temat tworzenia pakietu, zapoznaj się z naszą dokumentacją dotyczącą tworzenia pakietów.
Rozwiązywanie problemów
Włączanie dzienników
Możesz ustawić następującą zmienną środowiskową, aby pobrać dzienniki debugowania podczas korzystania z tej biblioteki.
export AZURE_LOG_LEVEL=verbose
Aby uzyskać bardziej szczegółowe instrukcje dotyczące włączania dzienników, zapoznaj się z dokumentami dotyczącymi pakietów @azure/rejestratora.
Śledzenie na żywo
Użyj narzędzia Live Trace z witryny Azure Portal, aby sprawdzić ruch komunikatów na żywo za pośrednictwem zasobu Web PubSub.