Postupy: Připojení ke službě Azure Fluid Relay
Tento článek vás provede postupem, jak zřizovat službu Azure Fluid Relay a připravit ji k použití.
Důležité
Než budete moct připojit aplikaci k serveru Azure Fluid Relay, musíte zřídit prostředek serveru Azure Fluid Relay na svém účtu Azure.
Služba Azure Fluid Relay je služba Fluid Relay hostovaná v cloudu. Aplikaci Fluid můžete připojit k instanci Azure Fluid Relay pomocí AzureClient v balíčku @fluidframework/azure-client . AzureClient
zpracovává logiku připojování kontejneru Fluid ke službě a přitom udržuje samotný objekt kontejneru nezávislý na službě. Ke správě více kontejnerů můžete použít jednu instanci tohoto klienta.
V následujících částech se dozvíte, jak se používá AzureClient
ve vaší vlastní aplikaci.
Připojení ke službě
Pokud se chcete připojit k instanci Azure Fluid Relay, musíte nejprve vytvořit .AzureClient
K vygenerování webového tokenu JSON (JWT), které se použijí k autorizaci aktuálního uživatele vůči službě, musíte zadat několik parametrů konfigurace, včetně ID tenanta, adresy URL služby a zprostředkovatele tokenu. Balíček @fluidframework/test-client-utils poskytuje insecureTokenProvider, který lze použít pro účely vývoje.
Upozornění
Tato InsecureTokenProvider
možnost by se měla používat jenom pro účely vývoje, protože jeho použití zveřejňuje tajný klíč tenanta ve vaší sadě kódu na straně klienta. Musí se nahradit implementací ITokenProvider, která načte token z vaší vlastní back-endové služby, která je zodpovědná za podepsání pomocí klíče tenanta. Příkladem implementace je AzureFunctionTokenProvider. Další informace naleznete v tématu Postupy: Zápis TokenProvider pomocí funkce Azure Functions. Všimněte si, že id
pole a name
pole jsou libovolná.
const user = { id: "userId", name: "userName" };
const config = {
tenantId: "myTenantId",
tokenProvider: new InsecureTokenProvider("myTenantKey", user),
endpoint: "https://myServiceEndpointUrl",
type: "remote",
};
const clientProps = {
connection: config,
};
const client = new AzureClient(clientProps);
Teď, když máte instanci AzureClient
, můžete ho začít používat k vytváření nebo načítání kontejnerů Fluid!
Zprostředkovatelé tokenů
AzureFunctionTokenProvider je implementace ITokenProvider
, která zajišťuje, že tajný klíč tenanta není vystavený v kódu balíčku na straně klienta. Přebírá AzureFunctionTokenProvider
adresu URL funkce Azure, která je připojená společně s aktuálním objektem /api/GetAzureToken
uživatele. Později provede GET
požadavek na funkci Azure Functions předáním ID tenanta, documentId a userId/userName jako volitelných parametrů.
const config = {
tenantId: "myTenantId",
tokenProvider: new AzureFunctionTokenProvider(
"myAzureFunctionUrl" + "/api/GetAzureToken",
{ userId: "userId", userName: "Test User" }
),
endpoint: "https://myServiceEndpointUrl",
type: "remote",
};
const clientProps = {
connection: config,
};
const client = new AzureClient(clientProps);
Přidání vlastních dat do tokenů
Objekt uživatele může obsahovat také volitelné další podrobnosti o uživateli. Příklad:
const userDetails = {
email: "xyz@outlook.com",
address: "Redmond",
};
const config = {
tenantId: "myTenantId",
tokenProvider: new AzureFunctionTokenProvider(
"myAzureFunctionUrl" + "/api/GetAzureToken",
{ userId: "UserId", userName: "Test User", additionalDetails: userDetails }
),
endpoint: "https://myServiceEndpointUrl",
type: "remote",
};
Vaše funkce Azure Functions vygeneruje token pro daného uživatele, který je podepsaný pomocí tajného klíče tenanta, a vrátí ho klientovi bez vystavení samotného tajného klíče.
Správa kontejnerů
Rozhraní AzureClient
API zveřejňuje funkce createContainer a getContainer pro vytváření a získávání kontejnerů. Obě funkce přebírají schéma kontejneru, které definuje datový model kontejneru. getContainer
Pro funkci je k dispozici další parametr kontejneruid
, který chcete načíst.
Ve scénáři vytváření kontejneru můžete použít následující vzor:
const schema = {
initialObjects: {
/* ... */
},
dynamicObjectTypes: [
/*...*/
],
};
const azureClient = new AzureClient(clientProps);
const { container, services } = await azureClient.createContainer(
schema
);
const id = await container.attach();
Volání container.attach()
je, když se kontejner skutečně připojí ke službě a zaznamená se do úložiště objektů blob. Vrátí id
jedinečný identifikátor této instance kontejneru.
Každý klient, který se chce připojit ke stejné relaci pro spolupráci, musí volat getContainer
se stejným kontejnerem id
.
const { container, services } = await azureClient.getContainer(
id,
schema
);
Další informace o tom, jak začít zaznamenávat protokoly generované fluidem, najdete v tématu Protokolování a telemetrie.
Načítaný kontejner bude obsahovat initialObjects
kontejner definovaný ve schématu kontejneru. Další informace o vytvoření schématu a použití objektu container
najdete v tématu Modelování dat na fluidframework.com.
Získání podrobností o cílové skupině
createContainer
Volání a getContainer
vrácení dvou hodnot: a container
-- popsané výše - a objekt služeb.
Obsahuje container
datový model Fluid a je nezávislý na službách. Veškerý kód, který zapíšete proti tomuto objektu kontejneru vráceného objektem, AzureClient
je opakovaně použitelný s klientem pro jinou službu. Příkladem je, že jste svůj scénář prototypovali pomocí TinyliciousClient, pak veškerý kód, který komunikuje se sdílenými objekty v kontejneru Fluid, můžete znovu použít při přechodu na použití AzureClient
.
Objekt services
obsahuje data specifická pro službu Azure Fluid Relay. Tento objekt obsahuje hodnotu cílové skupiny, kterou lze použít ke správě seznamu uživatelů, kteří jsou aktuálně připojeni ke kontejneru.
Následující kód ukazuje, jak můžete pomocí objektu audience
udržovat aktualizované zobrazení všech členů aktuálně v kontejneru.
const { audience } = containerServices;
const audienceDiv = document.createElement("div");
const onAudienceChanged = () => {
const members = audience.getMembers();
const self = audience.getMyself();
const memberStrings = [];
const useAzure = process.env.FLUID_CLIENT === "azure";
members.forEach((member) => {
if (member.userId !== (self ? self.userId : "")) {
if (useAzure) {
const memberString = `${member.userName}: {Email: ${member.additionalDetails ? member.additionalDetails.email : ""},
Address: ${member.additionalDetails ? member.additionalDetails.address : ""}}`;
memberStrings.push(memberString);
} else {
memberStrings.push(member.userName);
}
}
});
audienceDiv.innerHTML = `
Current User: ${self ? self.userName : ""} <br />
Other Users: ${memberStrings.join(", ")}
`;
};
onAudienceChanged();
audience.on("membersChanged", onAudienceChanged);
audience
poskytuje dvě funkce, které vrátí objekty AzureMember s ID uživatele a uživatelským jménem:
getMembers
vrátí mapu všech uživatelů připojených k kontejneru. Tyto hodnoty se změní, kdykoli se člen připojí nebo opustí kontejner.getMyself
vrátí aktuálního uživatele v tomto klientovi.
audience
generuje také události, pro které se změní seznam členů. membersChanged
se aktivuje pro všechny změny seznamu, zatímco memberAdded
u příslušných změn clientId
se aktivují změny a member
hodnoty, které memberRemoved
byly změněny. Po spuštění některé z těchto událostí se nové volání getMembers
vrátí aktualizovaný seznam členů.
Ukázkový AzureMember
objekt vypadá takto:
{
"userId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"userName": "Test User",
"connections": [
{
"id": "c699c3d1-a4a0-4e9e-aeb4-b33b00544a71",
"mode": "write"
},
{
"id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"mode": "write"
}
],
"additionalDetails": {
"email": "xyz@outlook.com",
"address": "Redmond"
}
}
Kromě ID uživatele, jména a dalších podrobností AzureMember
objekty obsahují také pole připojení. Pokud je uživatel přihlášený k relaci pouze s jedním klientem, connections
bude mít v něm pouze jednu hodnotu s ID klienta a zda je v režimu čtení a zápisu. Pokud je ale stejný uživatel přihlášený z více klientů (to znamená, že jsou přihlášeni z různých zařízení nebo mají otevřených více karet prohlížeče se stejným kontejnerem), connections
bude zde obsahovat více hodnot pro každého klienta. V příkladu výše uvedených dat vidíme, že uživatel s názvem Test User (Testovací uživatel) a ID 00aa-bb11-cc22-dd33-44e4ee4e4e4ee4ee" má v současné době otevřený kontejner ze dvou různých klientů. Hodnoty v poli additionalDetails odpovídají hodnotám zadaným v generování tokenu AzureFunctionTokenProvider
.
Tyto funkce a události lze kombinovat a prezentovat tak zobrazení uživatelů v reálném čase v aktuální relaci.
Gratulujeme! Teď jste úspěšně připojili kontejner Fluid ke službě Azure Fluid Relay a načtěte podrobnosti o uživateli pro členy ve spolupráci.