Канал диагностики
Исходный код: lib/diagnostics_channel.js
Модуль diagnostics_channel предоставляет API для создания именованных каналов для отчётов об произвольных данных сообщений в диагностических целях.
К нему можно получить доступ, используя:
Модули MJS
import diagnostics_channel from 'diagnostics_channel';
Модули CJS
const diagnostics_channel = require('diagnostics_channel'); Предполагается, что разработчик модуля, желающий отправить диагностические сообщения, создаст один или несколько каналов верхнего уровня для отправки сообщений. Каналы также можно получить во время выполнения, но это не рекомендуется из-за дополнительной нагрузки. Каналы могут быть экспортированы для удобства, но, поскольку имя известно, к нему можно получить доступ в любом месте.
Если вы планируете, чтобы ваш модуль генерировал диагностические данные для потребления другими модулями, рекомендуется включить документацию о используемых именованных каналах вместе с формой данных сообщения. Имена каналов, как правило, должны включать имя модуля, чтобы избежать коллизий с данными других модулей.
Общедоступный API
Обзор
Ниже представлен краткий обзор общедоступного API.
Модули MJS
import diagnostics_channel from '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'
});
}
Модули CJS
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 является необязательным, но полезен при попытке публиковать сообщения из кода, чувствительного к производительности.
Модули MJS
import diagnostics_channel from 'diagnostics_channel';
if (diagnostics_channel.hasSubscribers('my-channel')) {
// There are subscribers, prepare and publish message
}
Модули CJS
const diagnostics_channel = require('diagnostics_channel');
if (diagnostics_channel.hasSubscribers('my-channel')) {
// There are subscribers, prepare and publish message
}
diagnostics_channel.channel(name)
Это основной входной пункт для всех, кто хочет взаимодействовать с именованным каналом. Он создает объект канала, который оптимизирован для уменьшения накладных расходов во время публикации по мере возможности.
Модули MJS
import diagnostics_channel from 'diagnostics_channel';
const channel = diagnostics_channel.channel('my-channel');
Модули CJS
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 является необязательным, но полезен при попытке публиковать сообщения из кода, чувствительного к производительности.
Модули MJS
import diagnostics_channel from 'diagnostics_channel';
const channel = diagnostics_channel.channel('my-channel');
if (channel.hasSubscribers) {
// There are subscribers, prepare and publish message
}
Модули CJS
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<любое> Сообщение, которое нужно отправить подписчикам канала
Опубликовать сообщение всем подписчикам канала. Это запустит обработчики сообщений синхронно, поэтому они будут выполняться в том же контексте.
Модули MJS
import diagnostics_channel from 'diagnostics_channel';
const channel = diagnostics_channel.channel('my-channel');
channel.publish({
some: 'message'
});
Модули CJS
const diagnostics_channel = require('diagnostics_channel');
const channel = diagnostics_channel.channel('my-channel');
channel.publish({
some: 'message'
});
channel.subscribe(onMessage)
-
onMessage<Функция> Обработчик для получения сообщений канала
Регистрирует обработчик сообщений для подписки на этот канал. Этот обработчик будет выполняться синхронно всякий раз, когда публикуется сообщение в канал. Любые ошибки, возникающие в обработчике сообщений, вызовут 'uncaughtException'.
Модули MJS
import diagnostics_channel from 'diagnostics_channel';
const channel = diagnostics_channel.channel('my-channel');
channel.subscribe((message, name) => {
// Received data
});
Модули CJS
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).
Модули MJS
import diagnostics_channel from 'diagnostics_channel';
const channel = diagnostics_channel.channel('my-channel');
function onMessage(message, name) {
// Received data
}
channel.subscribe(onMessage);
channel.unsubscribe(onMessage);
Модули CJS
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-v16.x/docs/api/diagnostics_channel.html