Streams, kaynaktan sürekli veri okuyan ve hedef veriye kolayca aktarım yapılan nesnelerdir. Node.js 4 farklı streams çeşidi kullanır. Ben bunların üçünden bahsedeceğim.
Basit bir Node uygulamasında kullandığımız http server da request aslında bizim için readable stream, response writable stream ve fs modülü ise dublex stream olarak kullanılabilmektedir.
Streams nesnelerini kullanırken EventEmitter yapısını da kullanarak farklı zamanlarda oluşan olayları rahat bir şekilde takip edebiliriz. Bu yapıda kullanılan bazı eventler aşağıdaki gibidir.
Şimdi birkaç örnek üzerinden konuyu açıklayalım. İlk önce readable stream örneğine bakalım.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
file.txt adında bir dosyamız var ve fs.createReadStream yaparak bu dosyayı stream olarak okumamızı sağlıyoruz. readableStream.on diyerek EventEmitter yapısındaki fonksiyonları çağırıyoruz. Kaynaktan okuma yaparken yukarıda bahsettiğim gibi data event yapısına düşer. readableStream’den gelen her bir parçayı dataya ekliyoruz. Okunacak veri bittiğinde ise end event yapısına gidiyor ve datayı bastırıyor.
Pipe yapısını inceleyelim.
1 2 3 4 5 |
|
Pipe yapısı streams okumak ve yazmak için kullanılabilecek en iyi yöntemdir. Çünkü akışı size bırakmaz kontrolü kendindedir. Datayı okuma veya yazma hızını yönetme işini kendi yapar. Bu örnekte file1.txt içerisindeki veriyi pipe yaparak yani bir boru hattı oluşturup veriyi bu yapı içerisinden file2.txt aktardığını hayal edebilirsiniz. Pipe ile zincirleme bir yapısı kurarak birden fazla streams nesnesini kullanabilirsiniz.
1 2 3 4 5 6 |
|
Bu örnekte ilk önce input.txt.gz adında okunabilir bir streams yapısı oluşturuyoruz. zlib.createGunzip() ile unzip işlemi yaparak içeriği okunup output.txt’e yazılabilir bir stream oluşturup veriyi aktarıyoruz.
Şimdi basit bir streams yazma örneği yapalım. Gerekli açıklamaları kod içerisinde yaptım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Streams konusu özetle şimdilik bu kadar. Bu konuda araştırma yaptıkça buraya da aktaracağım.