Gelung acara Node.js
Gelung acara Node.js
Node.js ialah aplikasi satu proses, satu benang, tetapi menyokong konkurensi melalui acara dan panggilan balik, jadi prestasinya sangat tinggi.
Setiap API dalam Node.js adalah tak segerak dan berjalan sebagai urutan yang berasingan, menggunakan panggilan fungsi tak segerak dan mengendalikan serentak.
Pada asasnya semua mekanisme peristiwa dalam Node.js dilaksanakan menggunakan corak pemerhati dalam corak reka bentuk.
Urut tunggal Node.js adalah serupa dengan memasukkan gelung peristiwa while(true) sehingga tiada pemerhati acara keluar
Program dipacu peristiwa Node.js menggunakan model dipacu peristiwa Apabila pelayan web menerima permintaan, ia menutupnya dan memprosesnya, dan kemudian menyediakan permintaan web seterusnya. Apabila permintaan ini selesai, ia dimasukkan semula ke dalam baris gilir pemprosesan, dan apabila permulaan baris gilir tercapai, hasilnya dikembalikan kepada pengguna. Model ini sangat cekap dan berskala kerana pelayan web sentiasa menerima permintaan tanpa menunggu sebarang operasi baca atau tulis. (Ini juga dipanggil IO tidak menyekat atau IO dipacu peristiwa)
Dalam model dipacu peristiwa, gelung utama dijana untuk mendengar acara dan fungsi panggil balik dicetuskan apabila peristiwa dikesan.
// 引入 events 模块var events = require('events');// 创建 eventEmitter 对象var eventEmitter = new events.EventEmitter();Yang berikut. program mengikat Pengendali acara:
// 绑定事件及事件的处理程序eventEmitter.on('eventName', eventHandler);Kita boleh mencetuskan acara melalui program:
// 触发事件eventEmitter.emit('eventName');Instance
Buat fail main.js, kodnya adalah seperti 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("程序执行完毕。");
Let let kami melaksanakan Kod di atas: $ node main.js 连接成功。 数据接收成功。 程序执行完毕。
Bagaimanakah aplikasi Node berfungsi? Dalam aplikasi Nod, fungsi yang melaksanakan operasi tak segerak mengambil fungsi panggil balik sebagai parameter terakhir, Fungsi panggil balik menerima objek ralat sebagai parameter pertama. Seterusnya, mari kita lihat semula contoh sebelumnya dan buat input.txt dengan kandungan berikut:
菜鸟教程官网地址:www.runoob.comBuat fail main.js dengan kod 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("程序执行完毕");Dalam atur cara di atas, fs.readFile() ialah fungsi tak segerak yang digunakan untuk membaca fail. Jika ralat berlaku semasa membaca fail, objek ralat ralat akan mengeluarkan maklumat ralat. Jika tiada ralat berlaku, readFile melangkau output objek err dan kandungan fail dikeluarkan melalui fungsi panggil balik. Laksanakan kod di atas, hasil pelaksanaan adalah seperti berikut:
程序执行完毕 php中文网官网地址:www.php.cnSeterusnya kita padamkan fail input.txt, hasil pelaksanaan adalah seperti berikut:
程序执行完毕 Error: ENOENT, open 'input.txt'Sebab fail input.txt tidak wujud , jadi mesej ralat dikeluarkan.