Diagnostics Channel در Node.js: مدیریت پیام‌های تشخیصی و ردیابی

ماژول node:diagnostics_channel در Node.js یک API برای ایجاد کانال‌های نام‌گذاری‌شده فراهم می‌کند تا داده‌های تشخیصی به‌صورت پیام گزارش شوند. این قابلیت به توسعه‌دهندگان اجازه می‌دهد جریان اجرای برنامه را ردیابی کرده و اطلاعاتی مانند شروع و پایان عملیات، خطاها، و داده‌های مرتبط را به‌صورت ساختاریافته منتشر کنند.

diagnostics_channelChannel ClassTracingChannelsubscribe / unsubscribepublish

~2 دقیقه مطالعه • بروزرسانی ۶ دی ۱۴۰۴

1. مقدمه


ماژول diagnostics_channel برای ایجاد کانال‌های نام‌گذاری‌شده استفاده می‌شود. این کانال‌ها می‌توانند پیام‌های تشخیصی را منتشر کرده و توسط مشترکین دریافت شوند.


2. API عمومی


  • diagnostics_channel.channel(name): ایجاد یا دریافت یک کانال.
  • diagnostics_channel.hasSubscribers(name): بررسی وجود مشترک فعال.
  • diagnostics_channel.subscribe(name, handler): ثبت handler برای دریافت پیام‌ها.
  • diagnostics_channel.unsubscribe(name, handler): حذف handler ثبت‌شده.

3. کلاس Channel


  • channel.hasSubscribers: بررسی مشترکین فعال.
  • channel.publish(message): انتشار پیام به مشترکین.
  • channel.subscribe(handler): ثبت handler برای کانال.
  • channel.unsubscribe(handler): حذف handler.
  • channel.bindStore(store, transform): اتصال داده‌ها به AsyncLocalStorage.
  • channel.runStores(context, fn): اجرای تابع در محدودهٔ context ذخیره‌شده.

4. کلاس TracingChannel


TracingChannel مجموعه‌ای از کانال‌ها برای ردیابی یک عملیات قابل‌پیگیری است.


  • traceSync(fn, context): ردیابی اجرای همزمان.
  • tracePromise(fn, context): ردیابی اجرای Promise.
  • traceCallback(fn, position, context): ردیابی اجرای تابع callback.
  • کانال‌های داخلی: start، end، asyncStart، asyncEnd، error.

5. کانال‌های داخلی (Built-in Channels)


  • Console: رویدادهای console.log، console.error و غیره.
  • HTTP: رویدادهای مربوط به درخواست و پاسخ‌های HTTP.
  • HTTP/2: رویدادهای مربوط به streamهای HTTP/2.
  • Modules: رویدادهای مربوط به require() و import().
  • NET: رویدادهای مربوط به اتصال‌های TCP و Pipe.

6. مثال ساده


const diagnostics_channel = require('node:diagnostics_channel');
const channel = diagnostics_channel.channel('my-channel');

channel.subscribe((message, name) => {
  console.log('Received:', message);
});

if (channel.hasSubscribers) {
  channel.publish({ some: 'data' });
}

نتیجه‌گیری


ماژول diagnostics_channel ابزاری قدرتمند برای مدیریت داده‌های تشخیصی و ردیابی جریان اجرای برنامه در Node.js است. با استفاده از Channel و TracingChannel می‌توان عملیات همزمان و غیرهمزمان را به‌صورت دقیق ردیابی کرد و داده‌های مرتبط را به‌طور ساختاریافته منتشر نمود.


نوشته و پژوهش شده توسط دکتر شاهین صیامی