Spec-Zone.ru › Node.js 18 LTS

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

История
Версия Изменения
v18.13.0

diagnostics_channel теперь является Стабильным.

v15.1.0, v14.17.0

Добавлен в: v15.1.0, v14.17.0

Уровень стабильности: 2 - Стабильно

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

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

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

Модули MJS

import diagnostics_channel from 'node:diagnostics_channel';

Модули CJS

const diagnostics_channel = require('node:diagnostics_channel');

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

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

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

Обзор

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

Модули MJS

import diagnostics_channel from 'node:diagnostics_channel';

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

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

// Subscribe to the channel
diagnostics_channel.subscribe('my-channel', onMessage);

// Check if the channel has an active subscriber
if (channel.hasSubscribers) {
  // Publish data to the channel
  channel.publish({
    some: 'data',
  });
}

// Unsubscribe from the channel
diagnostics_channel.unsubscribe('my-channel', onMessage);

Модули CJS

const diagnostics_channel = require('node:diagnostics_channel');

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

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

// Subscribe to the channel
diagnostics_channel.subscribe('my-channel', onMessage);

// Check if the channel has an active subscriber
if (channel.hasSubscribers) {
  // Publish data to the channel
  channel.publish({
    some: 'data',
  });
}

// Unsubscribe from the channel
diagnostics_channel.unsubscribe('my-channel', onMessage);
diagnostics_channel.hasSubscribers(name)
Добавлен в: v15.1.0, v14.17.0
  • name <строка> | <символ> Имя канала
  • Возвращает: <логическое значение> Есть ли активные подписчики

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

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

Модули MJS

import diagnostics_channel from 'node:diagnostics_channel';

if (diagnostics_channel.hasSubscribers('my-channel')) {
  // There are subscribers, prepare and publish message
}

Модули CJS

const diagnostics_channel = require('node:diagnostics_channel');

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

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

Модули MJS

import diagnostics_channel from 'node:diagnostics_channel';

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

Модули CJS

const diagnostics_channel = require('node:diagnostics_channel');

const channel = diagnostics_channel.channel('my-channel');
diagnostics_channel.subscribe(name, onMessage)
Добавлен в: v18.7.0
  • name <строка> | <символ> Имя канала
  • onMessage <Функция> Обработчик для получения сообщений канала
    • message <любой> Данные сообщения
    • name <строка> | <символ> Имя канала

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

Модули MJS

import diagnostics_channel from 'node:diagnostics_channel';

diagnostics_channel.subscribe('my-channel', (message, name) => {
  // Received data
});

Модули CJS

const diagnostics_channel = require('node:diagnostics_channel');

diagnostics_channel.subscribe('my-channel', (message, name) => {
  // Received data
});
diagnostics_channel.unsubscribe(name, onMessage)
Добавлен в: v18.7.0
  • name <строка> | <символ> Имя канала
  • onMessage <Функция> Предыдущий обработчик подписки для удаления
  • Возвращает: <логическое значение> true если обработчик был найден, false в противном случае.

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

Модули MJS

import diagnostics_channel from 'node:diagnostics_channel';

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

diagnostics_channel.subscribe('my-channel', onMessage);

diagnostics_channel.unsubscribe('my-channel', onMessage);

Модули CJS

const diagnostics_channel = require('node:diagnostics_channel');

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

diagnostics_channel.subscribe('my-channel', onMessage);

diagnostics_channel.unsubscribe('my-channel', onMessage);

Класс: Channel

Добавлен в: v15.1.0, v14.17.0

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

channel.hasSubscribers
Добавлен в: v15.1.0, v14.17.0
  • Возвращает: <логическое значение> Есть ли активные подписчики

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

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

Модули MJS

import diagnostics_channel from 'node:diagnostics_channel';

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

if (channel.hasSubscribers) {
  // There are subscribers, prepare and publish message
}

Модули CJS

const diagnostics_channel = require('node:diagnostics_channel');

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

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

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

Модули MJS

import diagnostics_channel from 'node:diagnostics_channel';

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

channel.publish({
  some: 'message',
});

Модули CJS

const diagnostics_channel = require('node:diagnostics_channel');

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

channel.publish({
  some: 'message',
});
channel.subscribe(onMessage)
Добавлен в: v15.1.0, v14.17.0Устарел начиная с: v18.7.0
Уровень стабильности: 0 - Устарел: Используйте diagnostics_channel.subscribe(name, onMessage)
  • onMessage <Функция> Обработчик для получения сообщений канала
    • message <любой> Данные сообщения
    • name <строка> | <символ> Имя канала

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

Модули MJS

import diagnostics_channel from 'node:diagnostics_channel';

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

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

Модули CJS

const diagnostics_channel = require('node:diagnostics_channel');

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

channel.subscribe((message, name) => {
  // Received data
});
channel.unsubscribe(onMessage)
История
Версия Изменения
v18.7.0

Устарел начиная с: v18.7.0

v17.1.0, v16.14.0, v14.19.0

Добавлен возврат значения. Добавлен к каналам без подписчиков.

v15.1.0, v14.17.0

Добавлен в: v15.1.0, v14.17.0

Уровень стабильности: 0 - Устарел: Используйте diagnostics_channel.unsubscribe(name, onMessage)
  • onMessage <Функция> Предыдущий обработчик подписки для удаления
  • Возвращает: <логическое значение> true если обработчик был найден, false в противном случае.

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

Модули MJS

import diagnostics_channel from 'node: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('node:diagnostics_channel');

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

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

channel.subscribe(onMessage);

channel.unsubscribe(onMessage);

Встроенные каналы

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

Хотя API diagnostics_channel сейчас считается стабильным, встроенные каналы, которые в настоящее время доступны, таковыми не являются. Каждый канал должен быть объявлен стабильным индивидуально.

HTTP

http.client.request.start

  • request <http.ClientRequest>

Выдаётся при запуске запроса клиентом.

http.client.response.finish

  • request <http.ClientRequest>
  • response <http.IncomingMessage>

Выдаётся, когда клиент получает ответ.

http.server.request.start

  • request <http.IncomingMessage>
  • response <http.ServerResponse>
  • socket <net.Socket>
  • server <http.Server>

Выдаётся, когда сервер получает запрос.

http.server.response.finish

  • request <http.IncomingMessage>
  • response <http.ServerResponse>
  • socket <net.Socket>
  • server <http.Server>

Имеет место при отправке сервером ответа.

net.client.socket

  • socket <net.Socket>

Имеет место при создании нового TCP или сокета клиента канала.

net.server.socket

  • socket <net.Socket>

Имеет место при получении нового TCP или канала соединения.

udp.socket

  • socket <dgram.Socket>

Имеет место при создании нового сокета UDP.

© 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-v18.x/docs/api/diagnostics_channel.html

Spec-Zone.ru

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