Node.js tek kanallı (threaded) bir uygulamadır ama event ve callback kavramları üzerinden eşzamanlığı destekler. Her Node.js API’si eşzamansız ve tek kanallıdır. Eşzamanlılığı korumak için async fonksiyon çağrılarını kullanır. Node kanalı bir event döngüsü tutar ve görev tamamlandığında ilgili olayı çalıştırmak için olay-dinleme fonksiyonu bir tetikleme işlemi yapar.
Olaya Dayalı (Event-driven) Programlama
Node.js’in diğer benzer teknolojilere göre oldukça hızlı nedenlerinden biri olayları yoğun bir şekilde kullanmasıdır. Node.js sunucusu başlatılır başlatılmaz, değişkenlerini başlatır, fonksiyonları deklare eder ve olay gerçekleşmesini bekler. Olaya dayalı programlama da, olayları dinleyen ana bir döngü vardır, ve bir olay tespit edildiğinde bir callback fonksiyonu tetiklenir.
Node.js olayları ve olay dinlemelerini bağlamak için kullanılan olaylar modülü ve EventEmitter sınıfı aracığıyla birden çok olaya sahiptir.
1 2 3 4 5 |
// events module ekle var events = require('events'); // Bir eventEmitter nesnesi yarat var eventEmitter = new events.EventEmitter(); |
Bir olay ile bir olay işleyicisi (event handler) bağlamak için
1 |
eventEmitter.on('eventName', eventHandler); |
Bir olayı tetiklemek için
1 |
eventEmitter.emit('eventName'); |
Bir örnek:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Events module ekle var events = require('events'); // Bir eventEmitter nesnesi yarat var eventEmitter = new events.EventEmitter(); // Bir olay isleyicisi yarat var connectHandler = function connected() { console.log('Baglanti basarili.'); // veri_alindi olayını tetikle eventEmitter.emit('veri_alindi'); } // Baglantı olayını bagla eventEmitter.on('connection', connectHandler); // Eszamansız bir fonksiyonla veri_alindi olayını bagla eventEmitter.on('veri_alindi', function(){ console.log('veri basarili bir sekilde alindi.'); }); // Baglanti olayını tetikle eventEmitter.emit('connection'); console.log("Program Bitti."); |
Yukarıdaki kodun çıktısı aşağıdaki gibi olur.
1 2 3 |
Baglanti basarili. veri basarili bir sekilde alindi. Program Bitti. |