Latest web development tutorials

Node.js pętli zdarzeń

Node.js jest single-procesowe jednowątkowych aplikacji, ale obsługuje jednoczesne poprzez wydarzenia i wywołania zwrotne, więc wydajność jest bardzo wysoka.

Każdy API node.js jest asynchroniczne i działa jako oddzielny wątek, za pomocą asynchronicznych wywołań funkcji i współbieżność.

Node.js zasadniczo całego mechanizmu zdarzeń jest realizowany przy użyciu trybu obserwatora tryb konstrukcji.

Node.js jest podobna do wprowadzania pojedynczego wątku while (true) pętli zdarzenia, dopóki nie ma obserwatora zdarzenia wyjścia, każde zdarzenie asynchroniczne generuje obserwatorem zdarzeń, w przypadku wystąpienia zdarzenia nazywamy funkcja zwrotna.


Programowanie sterowane zdarzeniami

Node.js użyciu modelu zdarzeniami, gdy serwer WWW odbiera żądanie, a następnie umieścić go do przetworzenia, a następnie do kolejnego żądania usługi internetowej.

Gdy wniosek o zakończeniu jest ona zwracana do kolejki przetwarzania kolejki, gdy osiągnie początek wynik jest dostępny dla użytkownika.

Model ten jest bardzo wydajny skalowalność jest bardzo silny, ponieważ serwer WWW został przyjmowanie wniosków, nie czekając na każdej operacji odczytu lub zapisu. (To jest również znany jako non-blocking IO lub zdarzeniami IO)

W modelu zdarzeniami, generuje główną pętlę na nasłuchiwanie zdarzeń wywołać funkcję zwrotną po wykryciu zdarzenia.

Cały proces jest tak sterowany zdarzeniami osiągnąć, jest bardzo prosty. Nieco podobny do wzorca obserwatora, zdarzenie jest równoznaczne z motywu (tematu), podczas gdy wszystkie zarejestrowane obsługi tego zdarzenia odpowiada obserwatora (obserwatorów).

Node.js ma wiele wbudowanych imprezę, możemy poprzez wprowadzenie modułu imprez i związać i nasłuchiwać zdarzeń przez instancję klasy EventEmitter następujące przykłady:

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

Poniższa procedura obsługi zdarzenia wiązania:

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

Możemy zaprogramować zdarzenie wyzwalające:

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

Przykłady

Tworzenie main.js pliku, kod jest w następujący sposób:

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

Załóżmy wykonać powyższy kod:

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

Jak działa aplikacja węzła?

W węźle funkcja aplikacji wykonuje operację asynchroniczną funkcji zwrotnej jako ostatni parametr funkcji callback odbiera obiekt błędu jako pierwszy parametr.

Daj nam ponownie spojrzeć na poprzednim przykładzie, należy utworzyć input.txt dokument brzmi następująco:

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

Tworzenie main.js pliku, w sposób następujący:

var fs = require("fs");

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

Program wyżej fs.readFile () jest funkcja asynchroniczna jest używany do odczytu pliku. W przypadku wystąpienia błędu w procesie odczytu pliku, błąd err obiekty wyświetli komunikat o błędzie.

Jeśli nie ma błędów, readfile pominąć obiekt wyjściowy err, zawartość pliku jest wyprowadzana przez funkcję zwrotną.

Wykonać powyższy kod, wyniki wykonania są następujące:

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

Następnie usuń plik input.txt Wyniki wykonania są następujące:

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

Input.txt ponieważ plik nie istnieje, więc wyjście z komunikatem o błędzie.