Rumah >hujung hadapan web >Soal Jawab bahagian hadapan >Cara mengendalikan acara dalam utas tunggal nodejs

Cara mengendalikan acara dalam utas tunggal nodejs

WBOY
WBOYasal
2023-05-08 09:47:37465semak imbas

Node.js ialah persekitaran berjalan JavaScript yang ringan berdasarkan model I/O dipacu peristiwa dan tidak menyekat. Walau bagaimanapun, model satu benang Node.js sering menyebabkan pembangun bertanya: Bagaimana untuk mengendalikan acara dalam satu utas?

Untuk menjawab soalan ini dengan lebih baik, mari kita lihat mekanisme gelung peristiwa Node.js dahulu.

Mekanisme gelung peristiwa Node.js

Model utas tunggal Node.js tidak bermakna terdapat hanya satu utas yang dijalankan, sebenarnya, apabila Node.js dimulakan akan dibuat secara automatik A thread utama untuk mengendalikan kod JavaScript. Mekanisme gelung peristiwa Node.js ialah cara urutan ini mengendalikan acara.

Pertama, mari kita lihat aliran asas gelung acara.

  1. Laksanakan kod JavaScript

Apabila Node.js menerima permintaan atau peristiwa lain berlaku, ia akan melaksanakan kod JavaScript yang sepadan dan meletakkan kod itu ke dalam Tindanan Panggilan (panggilan timbunan). Setiap kali fungsi dilaksanakan, bingkai yang sepadan ditambah ke bahagian atas timbunan panggilan.

  1. Memproses fungsi panggil balik

Jika acara dicetuskan semasa pelaksanaan fungsi dan membawa fungsi panggil balik yang sepadan, maka fungsi panggil balik ini akan ditambah pada Jadual Acara . Jadual Acara ialah senarai yang mengekalkan surat-menyurat antara acara dan fungsi panggil balik yang sepadan.

  1. Gelung Acara

Apabila kod dalam tindanan panggilan dilaksanakan, Node.js akan memasuki peringkat gelung peristiwa (Gelung Acara). Fungsi tinjauan acara adalah untuk mencari sama ada peristiwa berlaku dalam Jadual Acara Jika ya, keluarkan fungsi panggil balik yang sepadan dan laksanakannya.

  1. Perlaksanaan fungsi panggil balik

Jika pengundian acara menemui fungsi panggil balik yang sepadan dengan acara, fungsi panggil balik akan ditambahkan pada timbunan panggilan dan kod yang sepadan akan menjadi dilaksanakan. Jika peristiwa baharu dicetuskan semasa pelaksanaan fungsi, ia akan kembali ke fasa pengundian acara sekali lagi.

  1. Tutup

Apabila Node.js mendapati bahawa tiada acara lagi untuk diproses dalam Jadual Acara dan pada masa ini tiada pemasa untuk menunggu, atur cara akan ditutup. Jika tidak, ia akan melompat kembali ke langkah ketiga, mengundi dan menunggu acara baharu berlaku.

Bagaimana untuk mengendalikan acara?

Cara paling asas ialah mengikat acara dan fungsi panggil balik bersama-sama, dan laksanakan fungsi panggil balik yang sepadan apabila peristiwa itu berlaku. Kita boleh melihat contoh mudah:

const EventEmitter = require('events');
const emitter = new EventEmitter();

emitter.on('event1', () => {
  console.log('event1 occured!');
})

emitter.emit('event1');

Dalam contoh ini, kami mentakrifkan EventEmitter dan mengikat acara 'event1' dan fungsi panggil balik yang sepadan. Apabila kita mencetuskan acara 'event1' melalui emitter.emit('event1'), fungsi panggil balik terikat akan dilaksanakan dan 'event1 occured!'

Satu lagi cara biasa untuk mengendalikan acara ialah menggunakan Promise. Melalui Promise, kami boleh menukar operasi tak segerak dan fungsi panggil balik kepada objek boleh rantai, dan menggunakan kaedah then and catch untuk mengendalikan situasi kejayaan dan kegagalan. Contohnya:

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('result');
  }, 1000);
});

promise.then((result) => {
  console.log(result);
}).catch((error) => {
  console.error(error);
});

Dalam contoh ini, kami mencipta objek Promise, mensimulasikan operasi tak segerak dan memproses hasil operasi tak segerak melalui kaedah kemudian dan tangkap.

Akhir sekali, Node.js turut menyediakan beberapa modul terbina dalam dan API untuk mengendalikan pelbagai acara. Contohnya:

  1. modul http: digunakan untuk mengendalikan permintaan dan respons HTTP.
  2. modul fs: digunakan untuk mengendalikan operasi baca dan tulis fail.
  3. modul bersih: digunakan untuk mencipta pelayan dan pelanggan TCP dan Unix Socket.
  4. objek proses: digunakan untuk mendapatkan dan mengawal maklumat dan kelakuan proses Node.js semasa.

Kesimpulan

Di bawah model satu benang, pemprosesan acara ialah salah satu ciri teras Node.js. Melalui mekanisme gelung peristiwa, Node.js boleh mengendalikan sejumlah besar permintaan serentak dan mencapai pengaturcaraan tak segerak yang cekap. Kami boleh menggunakan fungsi panggil balik, Promise dan modul terbina dalam serta API untuk mengendalikan pelbagai acara bagi melaksanakan pelbagai aplikasi yang kompleks.

Atas ialah kandungan terperinci Cara mengendalikan acara dalam utas tunggal nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn