18 Kasım 2014 Salı

NodeJS Events ve EventEmitter


Merhaba arkadaşlar, bu yazıda sizlere Observer Pattern'ine çok benzeyen NodeJS Event ve EventEmitter'dan bahsedeceğim. Event ve EventEmitter Observer Patterni gibi çalışır dolayısıyla burada bir adet olay adı bir de observer mevcuttur. Gelin detaylı bir şekilde bunları detaylı bir şekilde örnek üzerinde inceleyelim.

Diyelimki askerde iki kişi bir kulede nöbet tutyorsunuz ve yanınızdaki eleman da sizin alt devreniz. Üst devre olmanın getirdiği bir takım rahatlıklar ve ayrıcalıklar nedeniyle diğer elemanın uyumamasını söyleyip, siz bir güzel uyumayı tercih ettiniz. Diğer elemanın görevi komutan kuleyi kontrole geldiğinde, sizi uyandırması. Bundan sonra sizin adınız AskerA alt devrenin adı da AskerB olsun. Olay adı KomutanGeliyor, bununla bağlantılı olan fonksiyon ise Uyan! olsun. Böyle bir örnek olayı NodeJS ile nasıl modelleriz hep beraber ona bakalım.

NodeJS'in hızlı olmasının nedenlerinden bir tanesi de, ön tanımlı olarak event(olay) ler ile çalışması. Siz gerekli tanımlamaları yaparsınız, ve ondan sonra bir olay olduğunda gerekli aksiyonları çalıştırırsınız. NodeJS'te ön tanımlı olarak varolan bu özelliği, kendinize özel bir sistem kurmak için kullanmanız da mümkün. Bunun için kullanmamız gereken modulün adı events . Aşağıda çok basit bir şekilde yukarıdaki olayı örnekleyen kod mevcuttur:




Burada askeri uyandırmak için bir fonksiyon tanımladık. Sonra, belirli bir olay olduğunda askeri uyandırma fonksiyonunu çağırdık. KomutanGeliyor olayı olduğunda AskerB bir olay bildiriyor, ve bunu eventEmitter.emit ile yapıyor. AskerA da eventEmitter.on ile KomutanGeliyor olayını dinlediği için, AskerB nin yolladığı haberi duyuyor ve uyan fonksiyonu çalışıyor yani AskerA uyanıyor. Tabi bunların hepsini NodeJS'in events modülü sayesinde oluyor, ve bunu ekstradan npm install events diyerek yüklemiyorsunuz çünkü ön tanımlı olarak mevcut.  

Bir olaya birden fazla fonksiyon bağlamak da mümkündür. Mesela, komutan gelirken hem uyanıp hem de can yeleğini giymek istediğinde;



Bitmedi... Olayları haber verirken parametre de geçebilirsiniz. Mesela hangi komutanın geldiğini de söyleyebilirsiniz. Sevdiğiniz bir komutan ise uyumaya devam eder, gıcık biriyse anında uyanırsınız. Örnek;



Olayı haber verirken aynı zamanda hangi komutanın geldiği de belirtiliyor. 

Diyelimki komutan geldi ve başarılı bir şekilde uyandın ve selamını verdin. Komutan gittikten sonra bir daha gelmeyeceğini biliyorsun. O zaman daha fazla dinlemeye gerek kalmayabilir. Bunun için de;

eventEmitter.removeListener("KomutanGeliyor", uyan); 

ile bu olayı dinlemeyi bırakabilirsiniz. Hiçbir olayı dinlemek istemiyorsanız, koğuşa gidip rahat bir uyku çekmek istiyorsanız;

eventEmitter.removeAllListeners("KomutanGeliyor");

kullanabilirsiniz.

Sonuç olarak, NodeJS'te event kullanmak basit olmasına rağmen çok ciddi uygulamalarda hayat kurtarıcı yerlerde kullanılabilir. 

Not: Burada anlatılan yöntemleri askerlik yaparken kullanılması durumunda oluşacak problemlerin sorumluluğunu biz kabul etmiyoruz :)

Hiç yorum yok:

Yorum Gönder