Spec-Zone.ru › Node.js 14 LTS

Канал диагностики

Уровень стабильности: 1 - Экспериментальный

Исходный код: lib/diagnostics_channel.js

Модуль diagnostics_channel предоставляет API для создания именованных каналов для отчета об произвольных данных сообщений в диагностических целях.

Доступ к нему можно получить, используя:

const diagnostics_channel = require('diagnostics_channel');

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

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

Общедоступный API

Обзор

Ниже представлен краткий обзор общедоступного API.

const diagnostics_channel = require('diagnostics_channel');

// Get a reusable channel object
const channel = diagnostics_channel.channel('my-channel');

// Subscribe to the channel
channel.subscribe((message, name) => {
  // Received data
});

// Check if the channel has an active subscriber
if (channel.hasSubscribers) {
  // Publish data to the channel
  channel.publish({
    some: 'data'
  });
}
diagnostics_channel.hasSubscribers(name)
  • name <строка> | <символ> Имя канала
  • Возвращает: <логическое значение> Присутствуют ли активные подписчики

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

Этот API является необязательным, но полезным при попытке публиковать сообщения из кода, чувствительного к производительности.

const diagnostics_channel = require('diagnostics_channel');

if (diagnostics_channel.hasSubscribers('my-channel')) {
  // There are subscribers, prepare and publish message
}
diagnostics_channel.channel(name)
  • name <строка> | <символ> Имя канала
  • Возвращает: <Канал> Объект именованного канала

Это основной входной пункт для всех, кто хочет взаимодействовать с именованным каналом. Он создаёт объект канала, оптимизированный для минимизации накладных расходов во время публикации.

const diagnostics_channel = require('diagnostics_channel');

const channel = diagnostics_channel.channel('my-channel');

Класс: Channel

Класс Channel представляет собой отдельный именованный канал в потоке данных. Он используется для отслеживания подписчиков и публикации сообщений, когда подписчики присутствуют. Он существует как отдельный объект, чтобы избежать поиска каналов во время публикации, обеспечивая высокую скорость публикации и позволяя широко использовать его с минимальными затратами. Каналы создаются с помощью diagnostics_channel.channel(name), прямое создание канала с помощью new Channel(name) не поддерживается.

channel.hasSubscribers
  • Возвращает: <логическое значение> Присутствуют ли активные подписчики

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

Этот API является необязательным, но полезным при попытке публиковать сообщения из кода, чувствительного к производительности.

const diagnostics_channel = require('diagnostics_channel');

const channel = diagnostics_channel.channel('my-channel');

if (channel.hasSubscribers) {
  // There are subscribers, prepare and publish message
}
channel.publish(message)
  • message <любое> Сообщение для отправки подписчикам канала

Опубликовать сообщение всем подписчикам канала. Это запустит обработчики сообщений синхронно, поэтому они будут выполняться в одном контексте.

const diagnostics_channel = require('diagnostics_channel');

const channel = diagnostics_channel.channel('my-channel');

channel.publish({
  some: 'message'
});
channel.subscribe(onMessage)
  • onMessage <Функция> Обработчик для получения сообщений канала
    • message <любое> Данные сообщения
    • name <строка> | <символ> Имя канала

Зарегистрировать обработчик сообщений для подписки на этот канал. Этот обработчик будет выполняться синхронно всякий раз, когда сообщение публикуется в канал. Любые ошибки, возникшие в обработчике сообщений, приведут к срабатыванию 'uncaughtException'.

const diagnostics_channel = require('diagnostics_channel');

const channel = diagnostics_channel.channel('my-channel');

channel.subscribe((message, name) => {
  // Received data
});
channel.unsubscribe(onMessage)
  • onMessage <Функция> Предыдущий обработчик подписки для удаления

Удалить обработчик сообщений, ранее зарегистрированный для этого канала с помощью channel.subscribe(onMessage).

const diagnostics_channel = require('diagnostics_channel');

const channel = diagnostics_channel.channel('my-channel');

function onMessage(message, name) {
  // Received data
}

channel.subscribe(onMessage);

channel.unsubscribe(onMessage);

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v14.x/docs/api/diagnostics_channel.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API