Latest web development tutorials

Node.js Ereignisschleife

Node.js ist ein Single-Prozess Single-Threaded-Anwendungen, sondern über Ereignisse und Rückrufe gleichzeitig unterstützt, so dass Leistung ist sehr hoch.

Jede Node.js-API ist asynchron und wird als separater Thread, asynchrone Funktionsaufrufe verwenden und Gleichzeitigkeit.

Node.js im wesentlichen alle der Event-Mechanismus verwendet Design Mode-Beobachtungsmodus implementiert.

Node.js ist ähnlich wie bei einem einzelnen Thread zu Eingabe während (true) Ereignisschleife, bis kein Exit-Ereignis Beobachter ist, jedes asynchrone Ereignis ein Ereignis Beobachter erzeugt, wenn ein Ereignis die Callback-Funktion aufgerufen auftritt.


Die ereignisgesteuerte Programmierung

Node.js mit ereignisgesteuerten Modell, wenn der Web-Server die Anforderung empfängt, und dann für die Verarbeitung abschrecken und dann auf die nächste Web-Service-Anfrage.

Wenn die Anforderung abgeschlossen ist, um es in die Verarbeitungswarteschlange zurückgeführt wird, wenn die Warteschlange den Anfang erreicht hat, wird das Ergebnis an den Benutzer zurückgegeben.

Dieses Modell ist sehr effizient, skalierbar ist sehr stark, da der Webserver Anfragen empfangen wurde für jede Lese- oder Schreiboperation ohne Warten. (Dies wird auch als nicht-blockierende IO oder ereignisgesteuert IO bekannt)

Im ereignisgesteuerten Modell, erzeugt er eine Hauptschleife zu hören für Veranstaltungen eine Rückruffunktion auslösen, wenn ein Ereignis erkannt wird.

Der ganze Prozess ist so ereignisgesteuert, zu erreichen ist sehr einfach. Etwas ähnlich dem Beobachter-Muster, ist die Veranstaltung zu einem Thema (Betreff) gleichwertig, während alle registrierten Handler dieses Ereignis für den Beobachter (Observer) entspricht.

Node.js verfügt über mehrere integrierte Ereignis, können wir durch die Einführung von Veranstaltungen Modul und zu binden und für Veranstaltungen hören von EventEmitter Klasse Instanziierung die folgenden Beispiele:

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

Das folgende Verfahren bindend Event-Handler:

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

Wir können das auslösende Ereignis zu programmieren:

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

Beispiele

Erstellen main.js Datei, wird der Code wie folgt:

// 引入 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("程序执行完毕。");

Lassen Sie uns den Code oben ausführen:

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

Wie Knoten Anwendung arbeiten?

In Knoten Anwendungsfunktion führt eine asynchrone Operation Callback-Funktion als der letzte Parameter Rückruffunktion für die Fehlerobjekt als ersten Parameter erhält.

Lassen Sie uns wieder Blick auf die vorherigen Beispiel eine input.txt erstellen, Dokument lautet wie folgt:

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

Erstellen Sie main.js Datei wie folgt:

var fs = require("fs");

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

Programm über fs.readFile () ist eine asynchrone Funktion wird verwendet, um die Datei zu lesen. Wenn ein Fehler im Prozess auftritt, um die Datei zu lesen, irrt der Fehler Objekte eine Fehlermeldung ausgegeben.

Wenn keine Fehler, readfile Ausgang err Objekt überspringen, ist der Inhalt der Datei Ausgabe über die Callback-Funktion.

Führen Sie den Code oben, Ausführung Ergebnisse sind wie folgt:

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

Als nächstes werden wir input.txt Dateiausführung Ergebnisse sind wie folgt zu löschen:

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

Eingabe.txt, da die Datei nicht existiert, so dass die Ausgabe der Fehlermeldung.