Поделиться через


Пользовательская служба Azure Fluid Relay


Скорее всего, вы предпочитаете использовать бесплатную размещенную службу, но в некоторых ситуациях полезно использовать собственную службу Azure Fluid Relay для приложения Live Share.

Требования

  1. Создайте расширение для собраний на боковой панели и в приложении этапа, как показано в руководстве по ролику dice.
  2. Обновите манифест приложения, чтобы включить все необходимые разрешения.
  3. Подготовьте службу Azure Fluid Relay, как описано в этом руководстве.

Подключение к службе Azure Fluid Relay

При вызове инициализации LiveShareClientможно определить собственный AzureConnectionConfig. Live Share связывает создаваемые контейнеры с собраниями, но для подписывания маркеров для контейнеров необходимо реализовать ITokenProvider интерфейс. В этом примере описывается azure , AzureFunctionTokenProviderкоторая использует облачную функцию Azure для запроса маркера доступа с сервера.

import { LiveShareClient, LivePresence } from "@microsoft/live-share";
import { LiveShareHost } from "@microsoft/teams-js";
import { SharedMap } from "fluid-framework";
import { AzureFunctionTokenProvider } from "@fluidframework/azure-client";

// Define a custom connection for your app
const options = {
  connection: {
    tenantId: "MY_TENANT_ID",
    tokenProvider: new AzureFunctionTokenProvider(
      "MY_SERVICE_ENDPOINT_URL" + "/api/GetAzureToken",
      { userId: "userId", userName: "Test User" }
    ),
    endpoint: "MY_SERVICE_ENDPOINT_URL",
    type: "remote",
  },
};
// Join the Fluid container
const host = LiveShareHost.create();
const liveShare = new LiveShareClient(host, options);
const schema = {
  initialObjects: {
    presence: LivePresence,
    ticTacToePositions: SharedMap,
  },
};
const { container } = await liveShare.joinContainer(schema);

// ... ready to start app sync logic

Зачем использовать пользовательскую службу Azure Fluid Relay?

Рассмотрите возможность использования настраиваемого подключения к службе AFR, если вы:

  • Требовать хранения данных в контейнерах Fluid после времени существования собрания.
  • Передача конфиденциальных данных через службу, для чего требуется настраиваемая политика безопасности.
  • Разрабатывайте функции с помощью Fluid Framework для приложения за пределами Teams.

Зачем использовать Live Share с пользовательской службой?

Azure Fluid Relay предназначен для работы с любым веб-приложением, то есть он работает с Microsoft Teams или без него. Это поднимает важный вопрос: если я создаю собственную службу Azure Fluid Relay, мне по-прежнему нужна Live Share?

Live Share содержит функции, полезные для распространенных сценариев собраний, которые дополняют другие функции в приложении, включая:

Сопоставление контейнеров

Объект LiveShareClient in @microsoft/live-share отвечает за сопоставление уникального идентификатора собрания с контейнерами Fluid, что гарантирует, что все участники собрания присоединяются к одному контейнеру. В рамках этого процесса клиент пытается подключиться к containerId уже существующему собранию. Если он не существует, AzureClient используется для создания контейнера с помощью , AzureConnectionConfig а затем ретрансляции containerId другим участникам собрания.

Если в вашем приложении уже есть механизм для создания контейнеров Fluid и предоставления к ним общего доступа другим участникам, например путем вставки containerId в URL-адрес, общий для этапа собрания, это может не потребоваться для вашего приложения.

Проверка динамических объектов и ролей

Структуры динамических данных Live Share, такие как LivePresence, LiveStateи LiveEvent , предназначены для совместной работы на собраниях и, следовательно, не поддерживаются в контейнерах Fluid, используемых за пределами Microsoft Teams. Такие функции, как проверка ролей, помогают приложению соответствовать ожиданиям пользователей.

Примечание.

В качестве дополнительного преимущества живые объекты также имеют более высокую задержку сообщений по сравнению с традиционными структурами данных Fluid.

Дополнительные сведения см. на странице основных возможностей .

Использование Live Share без LiveShareClient

Вы по-прежнему можете использовать Live Share, даже если вы не хотите использовать LiveShareClient класс для настраиваемой службы Azure Fluid Relay. Это полезно, если вы хотите контролировать, когда создается контейнер или как он предоставляется участникам собрания.

Ниже приведен пример того, как это можно сделать в приложении.

import {
  LiveShareClient,
  LivePresence,
  getLiveShareContainerSchemaProxy,
} from "@microsoft/live-share";
import { SharedMap } from "fluid-framework";
import {
  AzureFunctionTokenProvider,
  AzureClient,
} from "@fluidframework/azure-client";
import { LiveShareHost } from "@microsoft/teams-js";

// Define a custom connection for your app
const options = {
  connection: {
    tenantId: "MY_TENANT_ID",
    tokenProvider: new AzureFunctionTokenProvider(
      "MY_SERVICE_ENDPOINT_URL" + "/api/GetAzureToken",
      { userId: "userId", userName: "Test User" }
    ),
    endpoint: "MY_SERVICE_ENDPOINT_URL",
    type: "remote",
  },
};
// Initialize your AzureClient instance
const client = new AzureClient(options);
// Define your Fluid schema
const schema = {
  initialObjects: {
    presence: LivePresence,
    ticTacToePositions: SharedMap,
  },
};
// Create your host
const host = LiveShareHost.create();
// Create the LiveShareRuntime, which is needed for `LiveDataObject` instances to work
const runtime = new LiveShareRuntime(this._host);
// Inject the LiveShareRuntime dependency into the ContainerSchema
const injectedSchema = getLiveShareContainerSchemaProxy(
    schema,
    runtime,
);
// Create (or get) your container
const { container } = await client.createContainer(injectedSchema);

// ... ready to start app sync logic

Кроме того, можно использовать или переопределить AzureLiveShareHost. Это позволяет получать пользовательские отображаемые имена и роли пользователей из , AzureAudienceа не через Microsoft Teams.

import {
  LiveShareClient,
  LivePresence,
  AzureLiveShareHost,
  getLiveShareContainerSchemaProxy,
} from "@microsoft/live-share";
import { SharedMap } from "fluid-framework";
import {
  AzureFunctionTokenProvider,
  AzureClient,
} from "@fluidframework/azure-client";

// Define a custom connection for your app
const options = {
  connection: {
    tenantId: "MY_TENANT_ID",
    tokenProvider: new AzureFunctionTokenProvider(
      "MY_SERVICE_ENDPOINT_URL" + "/api/GetAzureToken",
      { userId: "userId", userName: "Test User" }
    ),
    endpoint: "MY_SERVICE_ENDPOINT_URL",
    type: "remote",
  },
};
// Initialize your AzureClient instance
const client = new AzureClient(options);
// Define your Fluid schema
const schema = {
  initialObjects: {
    presence: LivePresence,
    ticTacToePositions: SharedMap,
  },
};
// Create your AzureLiveShareHost
const host = AzureLiveShareHost.create();
// Create the LiveShareRuntime, which is needed for `LiveDataObject` instances to work
const runtime = new LiveShareRuntime(this._host);
// Inject the LiveShareRuntime dependency into the ContainerSchema
const injectedSchema = getLiveShareContainerSchemaProxy(
    schema,
    runtime,
);
// Create (or get) your container
const { container } = await client.createContainer(injectedSchema);
// Set AzureAudience into the AzureLiveShareHost
host.setAudience(services.audience);

// ... ready to start app sync logic

Многие API Live Share зависят от глобального API метки времени, который позволяет LiveDataObject объектам определять порядок удаленных сообщений. Если вы используете структуры данных, которые зависят от TimestampProvider класса , необходимо либо использовать из teams-js библиотекиLiveShareHost, либо переопределить getTimestamp() функцию в AzureLiveShareHost с помощью значения, возвращаемого сервером.

См. также