Обработчики Azure Web PubSub CloudEvents для Express
Служба Azure Web PubSub — это управляемая Azure служба, которая помогает разработчикам легко создавать веб-приложения с функциями реального времени и шаблоном публикации и подписки. Любой сценарий, требующий обмена сообщениями между сервером и клиентами или между клиентами в режиме реального времени, может использовать службу Azure Web PubSub. Традиционные функции в режиме реального времени, которые часто требуют опроса с сервера или отправки HTTP-запросов, также могут использовать службу Azure Web PubSub.
При подключении webSocket служба Web PubSub преобразует жизненный цикл подключения и сообщения в события в формате CloudEvents. Эта библиотека предоставляет ПО промежуточного слоя express для обработки событий, представляющих жизненный цикл подключения WebSocket и сообщения, как показано на схеме ниже:
Сведения о терминах, используемых в данной статье, приводятся в разделе Основные понятия.
Исходный код | Пакет (NPM) | Справочная документация по API | Документация по продукту | Примеры
Начало работы
Поддерживаемые в настоящее время среды
- LTS версии Node.js
- Express версии 4.x.x или более поздней версии
Предварительные требования
- Подписка Azure.
- Существующая конечная точка Azure Web PubSub.
1. Установите пакет @azure/web-pubsub-express
npm install @azure/web-pubsub-express
2. Создание WebPubSubEventHandler
const express = require("express");
const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat");
const app = express();
app.use(handler.getMiddleware());
app.listen(3000, () =>
console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);
Основные понятия
Подключение
Подключение, также известное как подключение клиента или клиента, представляет собой отдельное подключение WebSocket, подключенное к службе Web PubSub. После успешного подключения служба Web PubSub назначает этому соединению уникальный идентификатор соединения.
Концентратор
Концентратор — это логическое понятие для набора клиентских подключений. Обычно используется один центр для одной цели, например центр чатов или центр уведомлений. При создании клиентского подключения оно подключается к концентратору и во время его существования принадлежит к нему. Разные приложения могут совместно использовать одну службу Azure Web PubSub с использованием разных имен центров.
Группа
Группа — это подмножество подключений к концентратору. Клиентское соединение можно добавлять к группе или удалять из нее в любое время. Например, если клиент присоединяется к комнате чата или покидает ее, такую комнату можно рассматривать как группу. Клиент может присоединиться к множеству групп, а группа может содержать множество клиентов.
Пользователь
Подключения к Web PubSub могут принадлежать одному пользователю. Пользователь может иметь множество подключений, например, если один пользователь подключен через несколько устройств или на нескольких вкладках браузера.
Client Events (События клиента)
События создаются во время жизненного цикла клиентского подключения. Например, простое клиентское подключение WebSocket создает событие connect
при попытке подключиться к службе, событие connected
при успешном подключении к службе, событие message
при отправке сообщений службе и событие disconnected
при отключении от службы.
Обработчик событий
Обработчик событий содержит логику для обработки событий клиента. Необходимо заранее зарегистрировать и настроить обработчик событий в службе с помощью портала или интерфейса командной строки Azure. Логика обработчика событий обычно размещается в серверной части.
Примеры
connect
Обработка запроса и назначение<userId>
const express = require("express");
const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat", {
handleConnect: (req, res) => {
// auth the connection and set the userId of the connection
res.success({
userId: "<userId>"
});
},
allowedEndpoints: ["https://<yourAllowedService>.webpubsub.azure.com"]
});
const app = express();
app.use(handler.getMiddleware());
app.listen(3000, () =>
console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);
Разрешить только указанные конечные точки
const express = require("express");
const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat", {
allowedEndpoints: [
"https://<yourAllowedService1>.webpubsub.azure.com",
"https://<yourAllowedService2>.webpubsub.azure.com"
]
});
const app = express();
app.use(handler.getMiddleware());
app.listen(3000, () =>
console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);
Настройка пути пользовательского обработчика событий
const express = require("express");
const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat", {
path: "customPath1"
});
const app = express();
app.use(handler.getMiddleware());
app.listen(3000, () =>
// Azure WebPubSub Upstream ready at http://localhost:3000/customPath1
console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);
Установка и чтение состояния подключения
const express = require("express");
const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat", {
handleConnect(req, res) {
// You can set the state for the connection, it lasts throughout the lifetime of the connection
res.setState("calledTime", 1);
res.success();
},
handleUserEvent(req, res) {
var calledTime = req.context.states.calledTime++;
console.log(calledTime);
// You can also set the state here
res.setState("calledTime", calledTime);
res.success();
}
});
const app = express();
app.use(handler.getMiddleware());
app.listen(3000, () =>
console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);
Устранение неполадок
Включение журналов
При использовании этой библиотеки с помощью приведенной ниже переменной среды можно получить журналы отладки.
- Получение журналов отладки из клиентской библиотеки SignalR
export AZURE_LOG_LEVEL=verbose
Более подробные инструкции по включению журналов см. в документации по пакету @azure и средства ведения журнала.
Динамическая трассировка
Для просмотра трафика в реальном времени воспользуйтесь динамической трассировкой на портале службы Web PubSub.
Дальнейшие действия
Подробные примеры использования этой библиотеки см. в каталоге примеров .
Участие
Если вы хотите вносить изменения в эту библиотеку, ознакомьтесь с руководством по внесению изменений, в котором содержатся сведения о создании и тестировании кода.
Связанные проекты
Azure SDK for JavaScript