Latest web development tutorials

نود.جي إس حلقة الحدث

نود.جي إس يبعد عملية واحدة تطبيقات ترابط واحد، ولكن يدعم المتزامنة عبر الأحداث والاسترجاعات، لذلك أداء مرتفع للغاية.

كل API نود.جي إس هو غير متزامن ويعمل على أنه موضوع مستقل، وذلك باستخدام المكالمات وظيفة غير متزامن، والتزامن.

نود.جي إس بكافة آلية حال تنفيذها باستخدام وضع مراقب وضع التصميم.

نود.جي إس يشبه الدخول في موضوع واحد بينما (الحقيقية) حلقة الحدث حتى لا يوجد مراقب الحدث الخروج، كل حدث غير متزامن يولد مراقب الحدث، في حالة حدوث الحدث يتم استدعاء الدالة رد.


البرمجة الموجهة بالأحداث

نود.جي إس باستخدام نموذج الحدث يحركها، عندما يتلقى خادم الويب الطلب، ومن ثم تأجيله لتجهيز وبعد ذلك إلى طلب خدمة ويب المقبل.

عند اكتمال الطلب، فإنه يتم إرجاعها إلى قائمة انتظار المعالجة، قائمة انتظار عندما يصل إلى البداية، يتم إرجاع النتيجة إلى المستخدم.

هذا النموذج هو قابلية فعالة جدا قوية جدا، لأن خادم قد تتلقى الطلبات دون انتظار أي القراءة أو الكتابة العملية. (هذا هو المعروف أيضا باسم IO غير مؤمن IO أو الحدث يحركها)

في نموذج يحركها حدث، فإنه يولد حلقة رئيسية للاستماع للأحداث لتشغيل دالة رد عندما تم الكشف عن الحدث.

العملية كلها وذلك لتحقيق الحدث يحركها، هو في غاية البساطة. تشبه إلى حد ما نمط مراقب، هذا الحدث هو ما يعادل لموضوع (موضوع)، في حين أن كل معالج المسجلين لهذا الحدث يتوافق مع المراقب (مراقب).

نود.جي إس لديها العديد من الحدث في البناء، نستطيع من خلال إدخال وحدة الأحداث، وربط والاستماع للأحداث التي كتبها instantiating الطبقة EventEmitter التالي أمثلة:

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

الإجراء التالي معالج الأحداث ملزم:

// 绑定事件及事件的处理程序
eventEmitter.on('eventName', eventHandler);

يمكننا برمجة الحدث اثار:

// 触发事件
eventEmitter.emit('eventName');

أمثلة

إنشاء ملف main.js، رمز على النحو التالي:

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

// 创建事件处理程序
var connectHandler = function connected() {
   console.log('连接成功。');
  
   // 触发 data_received 事件 
   eventEmitter.emit('data_received');
}

// 绑定 connection 事件处理程序
eventEmitter.on('connection', connectHandler);
 
// 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function(){
   console.log('数据接收成功。');
});

// 触发 connection 事件 
eventEmitter.emit('connection');

console.log("程序执行完毕。");

دعونا تنفيذ التعليمات البرمجية أعلاه:

$ node main.js
连接成功。
数据接收成功。
程序执行完毕。

كيف عقدة تطبيق العمل؟

في عقدة يؤدي وظيفة تطبيق وظيفة عملية الاستدعاء غير متزامن كما تستقبل آخر وظيفة المعلمة رد الكائن خطأ كمعلمة الأول.

دعونا نعيد النظر، في المثال السابق، قم بإنشاء input.txt ومن يقرأ الوثيقة على النحو التالي:

本教程官网地址:www.w3big.com

إنشاء ملف main.js، على النحو التالي:

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
   if (err){
      console.log(err.stack);
      return;
   }
   console.log(data.toString());
});
console.log("程序执行完毕");

ويستخدم برنامج فوق fs.readFile () وظيفة غير متزامن لقراءة الملف. في حالة حدوث خطأ في عملية قراءة الملف، تخطئ الخطأ الأجسام سيتم إخراج رسالة خطأ.

إذا لم يكن هناك أخطاء، طلب & ReadFile تخطي الكائن الناتج يخطئ، ومحتوى الملف هو الإخراج من خلال وظيفة رد.

تنفيذ التعليمات البرمجية أعلاه، نتائج التنفيذ هي كما يلي:

程序执行完毕
本教程官网地址:www.w3big.com

بعد ذلك قمنا بحذف ملف input.txt نتائج التنفيذ هي كما يلي:

程序执行完毕
Error: ENOENT, open 'input.txt'

Input.txt لأن الملف غير موجود، وبالتالي فإن الإخراج من رسالة الخطأ.