Node.js cemerlang dalam mengendalikan I/O tak segerak menggunakan seni bina dipacu peristiwanya. Di tengah-tengah sistem ini terletak kelas EventEmitter, yang penting untuk membina aplikasi dipacu acara. Dalam artikel ini, kami akan meneroka EventEmitter dalam Node.js, cara ia berfungsi dan cara menggunakannya dengan berkesan dalam aplikasi dunia sebenar. Kami juga akan meliputi pengendalian acara, acara tersuai, amalan terbaik dan kes penggunaan yang mempamerkan kuasa pengaturcaraan dipacu acara.
EventEmitter ialah kelas teras dalam Node.js yang memudahkan pelepasan dan pengendalian acara. Ia membolehkan anda mencipta dan mendengar acara, menjadikannya lebih mudah untuk mengurus operasi tak segerak dan membina aplikasi modular yang boleh diselenggara.
Kelas EventEmitter ialah sebahagian daripada modul acara Node.js, jadi anda perlu mengimportnya sebelum digunakan.
Contoh:
const EventEmitter = require('events'); const eventEmitter = new EventEmitter();
Sekarang kita mempunyai objek EventEmitter, mari kita tentukan cara untuk memancarkan dan mendengar acara.
Anda boleh memancarkan peristiwa menggunakan kaedah emit() dan mendengarnya menggunakan kaedah on() atau addListener().
Contoh:
const EventEmitter = require('events'); const eventEmitter = new EventEmitter(); // Create an event listener eventEmitter.on('greet', (name) => { console.log(`Hello, ${name}!`); }); // Emit an event eventEmitter.emit('greet', 'Aadyaa');
Output:
Hello, Aadyaa!
Dalam contoh ini, kami mentakrifkan acara tersuai yang dipanggil salam. Apabila acara dipancarkan, ia menyampaikan hujah 'Aadya' kepada pendengar acara, yang mencatatkan ucapan itu.
Anda boleh memancarkan berbilang acara daripada objek EventEmitter yang sama dan mengendalikannya menggunakan pendengar acara yang berasingan.
Contoh:
const EventEmitter = require('events'); const eventEmitter = new EventEmitter(); // Event listeners eventEmitter.on('start', () => { console.log('Starting...'); }); eventEmitter.on('stop', () => { console.log('Stopping...'); }); // Emit events eventEmitter.emit('start'); eventEmitter.emit('stop');
Output:
Starting... Stopping...
Contoh ini menunjukkan cara mengendalikan berbilang acara secara bebas, memberikan lebih kawalan ke atas tindakan yang berbeza dalam aplikasi anda.
Pendengar acara juga boleh tidak segerak. Node.js membolehkan anda mentakrifkan fungsi tak segerak dalam pendengar acara, yang boleh berguna untuk operasi tanpa sekatan.
Contoh:
const EventEmitter = require('events'); const eventEmitter = new EventEmitter(); // Async event listener eventEmitter.on('fetchData', async () => { const data = await new Promise((resolve) => { setTimeout(() => resolve('Data fetched!'), 2000); }); console.log(data); }); // Emit the event eventEmitter.emit('fetchData');
Output (selepas 2 saat):
Data fetched!
Dalam contoh ini, kami mentakrifkan pendengar acara untuk fetchData yang mensimulasikan operasi tak segerak menggunakan setTimeout. Pendengar menunggu janji diselesaikan sebelum mengelog data yang diambil.
Kadangkala, anda mungkin perlu mengalih keluar pendengar acara selepas ia memenuhi tujuannya. Anda boleh menggunakan kaedah removeListener() atau off() untuk mengalih keluar pendengar tertentu atau removeAllListeners() untuk mengalih keluar semua pendengar untuk acara tertentu.
Contoh:
const EventEmitter = require('events'); const eventEmitter = new EventEmitter(); const greetListener = (name) => { console.log(`Hello, ${name}!`); }; // Add and remove an event listener eventEmitter.on('greet', greetListener); eventEmitter.emit('greet', 'Aadyaa'); eventEmitter.removeListener('greet', greetListener); eventEmitter.emit('greet', 'Aadyaa'); // No output
Output:
Hello, Aadyaa!
Dalam kes ini, pendengar dialih keluar selepas ia dipanggil sekali, jadi pelepasan acara berikutnya tidak mempunyai kesan.
Secara lalai, objek EventEmitter boleh mempunyai sehingga 10 pendengar acara untuk satu acara. Jika anda melebihi had ini, anda akan menerima amaran. Anda boleh melaraskan had ini menggunakan kaedah setMaxListeners().
Contoh:
eventEmitter.setMaxListeners(15);
Ini membolehkan EventEmitter mengendalikan sehingga 15 pendengar acara untuk setiap acara tanpa mengeluarkan amaran.
eventEmitter.on('error', (err) => { console.error('Error:', err.message); }); eventEmitter.emit('error', new Error('Something went wrong!'));
Pengaturcaraan dipacu peristiwa biasanya digunakan dalam aplikasi sembang yang berbilang acara (seperti menerima dan menghantar mesej) mesti dikendalikan secara tidak segerak. Mari kita laksanakan aplikasi sembang mudah menggunakan EventEmitter.
Contoh:
const EventEmitter = require('events'); const eventEmitter = new EventEmitter(); let users = {}; // Register a new user eventEmitter.on('userJoined', (username) => { users[username] = []; console.log(`${username} has joined the chat!`); }); // Send a message eventEmitter.on('sendMessage', (username, message) => { if (users[username]) { users[username].push(message); console.log(`${username} sent: ${message}`); } }); // User leaves the chat eventEmitter.on('userLeft', (username) => { if (users[username]) { delete users[username]; console.log(`${username} has left the chat.`); } }); // Simulating chat activity eventEmitter.emit('userJoined', 'Aadyaa'); eventEmitter.emit('sendMessage', 'Aadyaa', 'Hello, everyone!'); eventEmitter.emit('userLeft', 'Aadyaa');
Output:
Aadyaa has joined the chat! Aadyaa sent: Hello, everyone! Aadyaa has left the chat.
In this basic chat application, we use events to manage user interactions, such as joining the chat, sending messages, and leaving the chat.
Event-driven programming is a powerful paradigm that allows you to build scalable and efficient applications. By mastering the EventEmitter in Node.js, you can handle asynchronous events with ease, ensuring that your application remains responsive and modular. Whether you're building a chat application, handling real-time notifications, or managing file streams, the EventEmitter class provides the tools to create event-driven solutions.
In this article, we covered the basics of EventEmitter, working with multiple events, handling asynchronous events, removing listeners, and common best practices. Understanding and applying these concepts will significantly enhance your ability to write effective event-driven Node.js applications.
Atas ialah kandungan terperinci Menguasai Pengaturcaraan Didorong Peristiwa dengan EventEmitter dalam Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!