Канал диагностики¶
Стабильность: 2 – Стабильная
АПИ является удовлетворительным. Совместимость с NPM имеет высший приоритет и не будет нарушена кроме случаев явной необходимости.
Модуль node:diagnostics_channel
предоставляет API для создания именованных каналов для передачи произвольных данных сообщений в целях диагностики.
Доступ к нему можно получить с помощью:
1 |
|
1 |
|
Предполагается, что автор модуля, желающий сообщать диагностические сообщения, создаст один или много каналов верхнего уровня, через которые будут передаваться сообщения. Каналы также могут быть получены во время выполнения, но это не рекомендуется из-за дополнительных накладных расходов. Для удобства каналы могут быть экспортированы, но пока известно их имя, они могут быть получены где угодно.
Если вы планируете, что ваш модуль будет выдавать диагностические данные для других пользователей, рекомендуется включить документацию о том, какие именованные каналы используются вместе с формой данных сообщений. Имена каналов, как правило, должны включать имя модуля, чтобы избежать коллизий с данными других модулей.
Публичный API¶
Обзор¶
Ниже приведен простой обзор публичного API.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
diagnostics_channel.hasSubscribers(name)
¶
name
{string|symbol} Имя канала- Возвращает:
<boolean>
Если есть активные подписчики
Проверьте, есть ли активные подписчики на названный канал. Это полезно, если сообщение, которое вы хотите отправить, может быть дорого подготовлено.
Этот API необязателен, но полезен при попытке публикации сообщений из очень чувствительного к производительности кода.
1 2 3 4 5 |
|
1 2 3 4 5 |
|
diagnostics_channel.channel(name)
¶
name
{string|symbol} Имя канала- Возвращает: {Channel} Объект именованного канала
Это основная точка входа для тех, кто хочет опубликоваться в именованном канале. Он создает объект канала, который оптимизирован для максимального снижения накладных расходов во время публикации.
1 2 3 |
|
1 2 3 |
|
diagnostics_channel.subscribe(name, onMessage)
¶
name
{string|symbol} Имя каналаonMessage
<Function>
Обработчик для получения сообщений каналаmessage
<any>
Данные сообщенияname
{string|symbol} Имя канала
Зарегистрируйте обработчик сообщений для подписки на этот канал. Этот обработчик сообщений будет выполняться синхронно каждый раз, когда сообщение будет опубликовано на канале. Любые ошибки, возникающие в обработчике сообщений, будут вызывать 'uncaughtException'
.
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
diagnostics_channel.unsubscribe(name, onMessage)
¶
name
{string|symbol} Имя каналаonMessage
<Function>
Предыдущий обработчик подписки для удаления- Возвращает:
<boolean>
true
, если обработчик был найден,false
в противном случае.
Удаляет обработчик сообщений, ранее зарегистрированный на этот канал с помощью diagnostics_channel.subscribe(name, onMessage)
.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
Класс: Channel
¶
Класс Channel
представляет индивидуальный именованный канал в конвейере данных. Он используется для отслеживания подписчиков и публикации сообщений при наличии подписчиков. Он существует как отдельный объект, чтобы избежать поиска канала во время публикации, обеспечивая очень высокую скорость публикации и возможность интенсивного использования при минимальных затратах. Каналы создаются с помощью diagnostics_channel.channel(name)
, создание канала напрямую с помощью new Channel(name)
не поддерживается.
channel.hasSubscribers
¶
- Возвращает:
<boolean>
Если есть активные подписчики
Проверяет, есть ли активные подписчики у этого канала. Это полезно, если сообщение, которое вы хотите отправить, может быть дорогостоящим в подготовке.
Этот API необязателен, но полезен при попытке публикации сообщений из очень чувствительного к производительности кода.
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
channel.publish(message)
¶
message
<any>
Сообщение для отправки подписчикам канала
Публикует сообщение всем подписчикам канала. При этом обработчики сообщений будут запускаться синхронно, поэтому они будут выполняться в одном и том же контексте.
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
channel.subscribe(onMessage)
¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Используйте diagnostics_channel.subscribe(name, onMessage)
onMessage
<Function>
Обработчик для получения сообщений каналаmessage
<any>
Данные сообщенияname
{string|symbol} Имя канала
Зарегистрируйте обработчик сообщений для подписки на этот канал. Этот обработчик сообщений будет выполняться синхронно каждый раз, когда сообщение будет опубликовано на канале. Любые ошибки, возникающие в обработчике сообщений, будут вызывать 'uncaughtException'
.
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
channel.unsubscribe(onMessage)
¶
Стабильность: 0 – устарело или набрало много негативных отзывов
Используйте diagnostics_channel.unsubscribe(name, onMessage)
onMessage
<Function>
Предыдущий обработчик подписки для удаления- Возвращает:
<boolean>
true
, если обработчик был найден,false
в противном случае.
Удаление обработчика сообщений, ранее зарегистрированного на этот канал с помощью channel.subscribe(onMessage)
.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
Встроенные каналы¶
Стабильность: 1 – Экспериментальная
Экспериментальный
В то время как API diagnostics_channel
теперь считается стабильным, встроенные каналы, доступные в настоящее время, таковыми не являются. Каждый канал должен быть объявлен стабильным независимо.
HTTP¶
http.client.request.start
запрос
{http.ClientRequest}
Выдается, когда клиент начинает запрос.
http.client.response.finish
запрос
{http.ClientRequest}response
{http.IncomingMessage}
Выдается, когда клиент получает ответ.
http.server.request.start
запрос
{http.IncomingMessage}response
{http.ServerResponse}сокет
<net.Socket>
server
{http.Server}
Выдается, когда сервер получает запрос.
http.server.response.finish
запрос
{http.IncomingMessage}ответ
{http.ServerResponse}socket
<net.Socket>
server
{http.Server}
Выдается, когда сервер посылает ответ.
NET¶
net.client.socket
socket
<net.Socket>
Выдается при создании нового клиентского сокета TCP или pipe.
net.server.socket
socket
<net.Socket>
Выдается при получении нового TCP- или pipe-соединения.
UDP¶
udp.socket
socket
{dgram.Socket}
Выдается при создании нового UDP сокета.
Процесс¶
детский_процесс
process
ChildProcess
Выдается при создании нового процесса.
Рабочий поток¶
worker_threads
worker
Worker
Выдается при создании нового потока.