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


Руководство. Публикация и подписка сообщений с помощью API WebSocket и пакета SDK службы Azure Web PubSub

Служба Azure Web PubSub помогает легко создавать приложения веб-обмена сообщениями в режиме реального времени. В этом руководстве описано, как подписаться на службу с помощью API WebSocket и опубликовать сообщения с помощью пакета SDK службы Web PubSub.

В этом руководстве вы узнаете, как:

  • Создание экземпляра службы Web PubSub.
  • Создание полного URL-адреса для установки подключения WebSocket
  • Создание клиента подписчика Web PubSub для получения сообщений с помощью стандартного протокола WebSocket
  • Создание клиента издателя Web PubSub для публикации сообщений с помощью пакета SDK службы Web PubSub

Prerequisites

Командную оболочку Windows cmd.exe можно использовать вместо оболочки Bash для выполнения команд в этом руководстве.

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

Important

Необработанные строки подключения отображаются в этой статье в демонстрационных целях.

Строка подключения содержит сведения об авторизации, требуемые для доступа приложения к службе Azure Web PubSub. Ключ доступа в строке подключения аналогичен паролю привилегированного пользователя для службы. В рабочих средах всегда защищать ключи доступа. Используйте Azure Key Vault для безопасного управления и ротирования ваших ключей, а также для защиты вашего подключения с помощью WebPubSubServiceClient.

Старайтесь не распространять ключи доступа среди других пользователей, жестко программировать их или где-то сохранять в виде обычного текста в открытом доступе для других пользователей. Меняйте свои ключи периодически, если считаете, что они могли быть скомпрометированы.

Подготовьте вашу среду

Настройка Azure CLI для локальной разработки

Выполните следующие действия, чтобы настроить Azure CLI и среду проекта.

  1. Откройте командную оболочку.

  2. Обновите до последней версии Azure CLI.

    az upgrade
    
  3. Установите расширение Azure CLI для Web PubSub.

    az extension add --name webpubsub
    
  4. Войдите в Azure CLI. Следуя инструкциям, введите свои учетные данные Azure.

    az login
    

Создайте группу ресурсов

Группа ресурсов — это логический контейнер, в котором происходит развертывание ресурсов Azure и управление ими. Используйте команду az group create, чтобы создать группу ресурсов с именем myResourceGroup в расположенииeastus.

az group create --name myResourceGroup --location EastUS

Создайте экземпляр Azure Web PubSub

Создайте экземпляр Web PubSub

Чтобы создать экземпляр Web PubSub в созданной группе ресурсов, используйте команду azure CLI az webpubsub create . Следующая команда создает ресурс Free Web PubSub в группе myResourceGroup ресурсов:EastUS

Каждый ресурс Web PubSub должен иметь уникальное имя. Замените <имя вашего уникального ресурса> на имя вашего экземпляра Web PubSub в следующей команде.

az webpubsub create --resource-group myResourceGroup --name <your-unique-resource-name> --location EastUS --sku Free_F1

В выходных данных команды будут показаны свойства созданного ресурса. Обратите внимание на следующие свойства:

  • name: Имя Web PubSub, указанное в приведенном выше параметре --name .
  • hostName: в примере имя узла <your-unique-resource-name>.webpubsub.azure.com/.

На данном этапе любые операции в этом новом ресурсе могут выполняться только с использованием вашей учетной записи Azure.

Получите строку подключения

Выполните команду Azure CLI az webpubsub key, чтобы получить значение ConnectionString службы. Замените <your-unique-resource-name> заполнитель именем экземпляра Azure Web PubSub.

az webpubsub key show --resource-group myResourceGroup --name <your-unique-resource-name> --query primaryConnectionString --output tsv

Скопируйте строка подключения для последующего использования.

Создание клиента подписчика

Клиенты подключаются к службе Azure Web PubSub через стандартный протокол WebSocket с помощью проверки подлинности json Web Token (JWT). SDK для службы предоставляет вспомогательные методы для создания токена. В этом руководстве подписчик напрямую генерирует токен из ConnectionString. В реальных приложениях серверное приложение обычно обрабатывает рабочий процесс проверки подлинности и авторизации. Чтобы лучше понять рабочий процесс, ознакомьтесь с руководством по созданию приложения чата.

Необработанные строки подключения отображаются в этой статье в демонстрационных целях. В рабочих средах всегда защищать ключи доступа. Используйте Azure Key Vault для безопасного управления и ротирования ваших ключей, а также для защиты вашего подключения с помощью WebPubSubServiceClient.

  1. Сначала создайте каталог проекта с именем subscriber этого проекта и установите необходимые зависимости:

    • Пакет Websocket.Client — это сторонний пакет, поддерживающий подключения WebSocket. Вы можете использовать любой API или библиотеку, которая поддерживает WebSocket.
    • Пакет Azure.Messaging.WebPubSub SDK помогает создать JWT.
    mkdir subscriber
    cd subscriber
    dotnet new console
    dotnet add package Websocket.Client --version 4.3.30
    dotnet add package Azure.Messaging.WebPubSub --version 1.0.0
    
  2. Замените код в Program.cs на следующий код для подключения к службе:

    using System;
    using System.Threading.Tasks;
    
    using Azure.Messaging.WebPubSub;
    
    using Websocket.Client;
    
    namespace subscriber
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                if (args.Length != 2)
                {
                    Console.WriteLine("Usage: subscriber <connectionString> <hub>");
                    return;
                }
                var connectionString = args[0];
                var hub = args[1];
    
                // Either generate the URL or fetch it from server or fetch a temp one from the portal
                var serviceClient = new WebPubSubServiceClient(connectionString, hub);
                var url = serviceClient.GetClientAccessUri();
    
                using (var client = new WebsocketClient(url))
                {
                    // Disable the auto disconnect and reconnect because the sample would like the client to stay online even no data comes in
                    client.ReconnectTimeout = null;
                    client.MessageReceived.Subscribe(msg => Console.WriteLine($"Message received: {msg}"));
                    await client.Start();
                    Console.WriteLine("Connected.");
                    Console.Read();
                }
            }
        }
    }
    
    

    Код создает подключение WebSocket, подключенное к концентратору в Web PubSub. Узел — это логическая единица в Web PubSub, где можно отправлять сообщения группе клиентов. Основные понятия содержат подробное описание терминов, используемых в Web PubSub.

    Служба Web PubSub использует авторизацию через веб-токены JSON (JWT). Пример кода использует WebPubSubServiceClient.GetClientAccessUri() из пакета SDK Web PubSub для создания URL-адреса к службе, который содержит полный URL-адрес с допустимым маркером доступа.

    После установки подключения клиент получает сообщения через подключение WebSocket. Клиент использует client.MessageReceived.Subscribe(msg => ...));, чтобы прослушивать входящие сообщения.

  3. Чтобы запустить подписчик, выполните следующую команду, заменив <Web-PubSub-connection-string> на строку подключения, скопированную ранее.

    dotnet run <Web-PubSub-connection-string> "myHub1"
    

2. Публикация сообщений с помощью пакета SDK службы

Создайте издателя с помощью пакета SDK azure Web PubSub для публикации сообщения в подключенном клиенте. Для этого проекта необходимо открыть другую командную оболочку.

  1. Сначала создайте каталог проекта с именем publisher и установите необходимые зависимости:

    mkdir publisher
    cd publisher
    dotnet new console
    dotnet add package Azure.Messaging.WebPubSub
    
  2. Обновите файл Program.cs, чтобы использовать класс WebPubSubServiceClient и отправлять сообщения клиентам.

    using System;
    using System.Threading.Tasks;
    using Azure.Messaging.WebPubSub;
    
    namespace publisher
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                if (args.Length != 3) {
                    Console.WriteLine("Usage: publisher <connectionString> <hub> <message>");
                    return;
                }
                var connectionString = args[0];
                var hub = args[1];
                var message = args[2];
    
                // Either generate the token or fetch it from server or fetch a temp one from the portal
                var serviceClient = new WebPubSubServiceClient(connectionString, hub);
                await serviceClient.SendToAllAsync(message);
            }
        }
    }
    
    

    Вызов SendToAllAsync() просто отправляет сообщение всем подключенным клиентам в концентраторе.

  3. Отправьте сообщение, выполнив следующую команду. Замените <Web-PubSub-connection-string> на строку подключения, скопированную ранее.

    dotnet run <Web-PubSub-connection-string> "myHub1" "Hello World"
    
  4. Убедитесь, что командная оболочка подписчика получает сообщение:

    Message received: Hello World
    

Cleanup

Вы можете удалить ресурсы, созданные в этом кратком руководстве, удалив группу ресурсов, содержащую их.

az group delete --name myResourceGroup --yes

Если вы не планируете продолжать использовать Azure Cloud Shell, вы можете избежать накапливаемых затрат, удалив группу ресурсов, содержащую связанную учетную запись хранения. Группа ресурсов называется cloud-shell-storage-<your-region>. Выполните следующую команду, заменив <CloudShellResourceGroup> на имя группы Cloud Shell.

az group delete --name <CloudShellResourceGroup> --yes

Caution

Удаление групп ресурсов приведет к удалению всех ресурсов, включая ресурсы, созданные вне области работы этого руководства.

Дальнейшие шаги

В этом руководстве вы узнаете, как подключиться к службе Web PubSub и публиковать сообщения на подключенных клиентах.

Дополнительные сведения об использовании службы см. в других руководствах.