Latest web development tutorials

Node.js loop acara

Node.js adalah satu-proses aplikasi single-threaded, tapi mendukung bersamaan melalui acara dan callback, sehingga kinerja sangat tinggi.

Setiap API Node.js adalah asynchronous dan berjalan sebagai thread terpisah, menggunakan fungsi panggilan asynchronous, dan concurrency.

Node.js substansial seluruh mekanisme event diimplementasikan dengan menggunakan pengamat mode modus desain.

Node.js mirip dengan memasuki satu thread sementara (benar) loop acara sampai tidak ada acara keluar pengamat, setiap peristiwa asynchronous menghasilkan pengamat acara, jika terjadi peristiwa yang disebut fungsi callback.


pemrograman event-driven

Node.js dengan menggunakan model-event, ketika web server menerima permintaan, dan kemudian menundanya untuk pengolahan dan kemudian ke permintaan layanan web berikutnya.

Ketika permintaan selesai, itu kembali ke antrian pengolahan, antrian saat mencapai awal, hasilnya dikembalikan ke pengguna.

Model ini skalabilitas yang sangat efisien sangat kuat, karena webserver telah menerima permintaan tanpa menunggu setiap membaca atau menulis operasi. (Ini juga dikenal sebagai non-blocking IO atau event-driven IO)

Dalam model-event, itu menghasilkan loop utama untuk mendengarkan acara untuk memicu fungsi callback ketika sebuah peristiwa terdeteksi.

Seluruh proses ini sangat-event untuk mencapai, sangat sederhana. Agak mirip dengan pola pengamat, acara ini setara dengan tema (Subjek), sementara semua handler terdaftar untuk acara ini sesuai dengan pengamat (Observer).

Node.js memiliki beberapa built-in event, kita dapat melalui pengenalan modul peristiwa, dan untuk mengikat dan mendengarkan peristiwa oleh instantiating kelas EventEmitter berikut contoh:

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

Prosedur berikut event mengikat handler:

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

Kita bisa memprogram acara memicu:

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

contoh

Membuat file main.js, kode tersebut adalah sebagai berikut:

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

Mari kita menjalankan kode di atas:

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

Bagaimana kerja aplikasi Node?

Dalam Node fungsi aplikasi melakukan fungsi operasi callback asynchronous sebagai fungsi parameter callback lalu menerima objek kesalahan sebagai parameter pertama.

Mari kita kembali melihat-pada contoh sebelumnya, membuat input.txt sebuah, dokumen berbunyi sebagai berikut:

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

Membuat file main.js, sebagai berikut:

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 di atas fs.readFile () adalah fungsi asynchronous digunakan untuk membaca file. Jika terjadi kesalahan dalam proses membaca file, kesalahan err benda akan menampilkan pesan kesalahan.

Jika tidak ada kesalahan, readFile melewatkan objek keluaran err, isi file output melalui fungsi callback.

Mengeksekusi kode di atas, hasil pelaksanaan adalah sebagai berikut:

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

Selanjutnya kita menghapus file input.txt hasil eksekusi adalah sebagai berikut:

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

Input.txt karena file tidak ada, sehingga output dari pesan kesalahan.