İleri Düzey Node.js Stream Kullanımı: Duplex ve PassThrough İşleme ()

İleri Düzey Node.js Stream Kullanımı: Duplex ve PassThrough İşleme ()

Bu makale, Nodejs Stream API'si ile ileri düzey Duplex ve PassThrough Stream işleme yöntemlerine odaklanmaktadır Duplex Stream, hem okuma hem de yazma işlemlerini destekleyen bir akış tipidir ve PassThrough Stream, gelen verileri değiştirmeden geçiren bir akıştır Makale, bu iki akış türünün kullanımını ayrıntılı bir şekilde açıklamaktadır Duplex Stream'in kullanımı için, Readable ve Writable Stream özellikleri ile streamDuplex yöntemi kullanılır PassThrough Stream için ise, streamPassThrough yöntemi kullanılır Bu makalenin sonunda, her iki akış türü arasındaki farkları ve hangi durumlarda hangi yöntemin kullanılabileceğine dair bir anlayış edineceksiniz

İleri Düzey Node.js Stream Kullanımı: Duplex ve PassThrough İşleme ()

Bu makale, Node.js Stream API'siyle ileri düzey Duplex ve PassThrough Stream işleme yöntemlerini tartışacaktır. Duplex Stream, hem okuma hem de yazma işlemlerini destekleyen bir akış türüdür. PassThrough Stream ise, gelen verileri değiştirmeden geçiren bir akış türüdür. Bu makale, bu iki stream türünün ileri düzey kullanımını öğrenmek isteyenlere rehberlik etmektedir.

Duplex Stream'in ortak özellikleri olan Readable ve Writable Streamlerin kullanımını gösterecek ve Duplex Stream oluşturma, veri okuma ve yazma gibi işlemleri açıklayacağız. Aynı şekilde, PassThrough Stream'in kullanımı da kapsamlı bir şekilde ele alınacaktır. Bu makalenin sonunda, her iki stream türü arasındaki farkları ve hangi durumlarda hangi yöntemin kullanılması gerektiği ile ilgili fikir sahibi olacaksınız.


Duplex Stream Kullanımı

Duplex Stream, hem okuma hem de yazma işlemlerini gerçekleştirebilen bir stream türüdür. Duplex Stream'ler, Readable ve Writable Stream özelliklerini içerir ve her iki işlemi de yapabilir.

Duplex Stream'ler genellikle TCP/IP soketlerde kullanılır ve verilerin iki yönlü olarak aktarılmasını sağlar. Ayrıca, bir stream'ın girdisini başka bir stream'a aktarmak için de kullanılabilirler. Ayrıca, duplex stream'ler daha karmaşık stream işlemleri için de kullanılabilir.

Duplex Stream'ler, Node.js'in "stream" modülü kullanılarak oluşturulabilir. Duplex Stream oluşturmak için "Duplex" sınıfını kullanabiliriz. Bu sınıf, "readable" ve "writable" özellikleri içerir ve onların işlevlerini kullanarak stream'in okuma ve yazma işlemlerini gerçekleştirir.

Bir Duplex Stream oluşturduktan sonra, veri aktarımını sağlamak için "on()" ve "write()" fonksiyonları kullanılabilir. "on()" fonksiyonu, stream üzerindeki veri olaylarını işlerken, "write()", stream'e veri yazmak için kullanılır.

Duplex Stream'leri, birçok farklı senaryoda kullanabilirsiniz. Örneğin, dosya işleme, dosya aktarımı, ağ iletişimi gibi farklı alanlarda Duplex Stream kullanabilirsiniz.


Duplex Stream İlkeleri

Duplex Stream, hem okuma hem de yazma işlemlerini destekleyen bir akış türüdür. Readable ve Writable Stream özelliklerini içerir. Duplex Stream, gelen verileri okurken aynı zamanda diğer bir akışa yazabilir. Bu, veri akışını işlemek için kullanışlı bir yöntemdir. Duplex Stream kullanarak iletişim kurabilir, bir taraftan veri alabilir ve diğer taraftan veri gönderebilirsiniz.

Duplex Stream, birçok farklı senaryoda kullanılabilir. Veri tabanlarına, ağ haberleşmesine ve dosya sistemine erişim için kullanılabilir. Duplex Stream, anlık veya yalnızca okuma veya yalnızca yazma işlemi yapılacak durumlarda kullanılmaktan daha esnek bir seçenektir.

Duplex Stream'in çalışma prensibi, hem veri akışlarının okuma özelliğini sağlamak hem de iletilen verileri yazmak için bir bağlantı aracı olarak hizmet etmektir. Duplex Stream'in kullanımı daha kapsamlı bir işlem gerektirse de, daha esnek bir yaklaşımı temsil eder.


Duplex Stream Oluşturma

Duplex Stream oluşturmanın birden fazla yolu vardır. Bunları sıralamadan önce farklı yöntemler hakkında kısaca bilgi verelim. Duplex Stream oluşturma yöntemleri örnekte olduğu gibi iki şekilde gerçekleştirilebilir:

  • new Stream.Duplex([options]): Bu yöntem, Readable ve Writable Stream'leri birleştiren bir arayüz oluşturur. Parametre olarak ({object}) opsiyonel bir seçenek nesnesi alır.
  • stream.Transform(options): Transform Stream, her iki akım özelliğinin yanı sıra ara bellek işlevselliği de sunar. Yine, seçenekler ({object}) parametre olarak geçirilebilir

Bir Duplex Stream örneği oluşturmak için aşağıdaki örnek üzerinden ilerleyebilirsiniz:

const stream = require('stream');class DuplexStream extends stream.Duplex {  constructor(options) {    super(options);  }  _read(size) {    // Okuma işlemi gerçekleştirilir  }  _write(chunk, encoding, callback) {    // Yazma işlemi gerçekleştirilir  }}

Bu örnekte, stream modülü require yöntemi kullanılarak içe aktarılır. Daha sonra, ana sınıfı genişleten özel bir DuplexStream sınıfı tanımlanır. Super() yöntemi kullanarak ebeveyn sınıfının tüm özelliklerini kopyaladığından, bu özel sınıf daha sonra bir Duplex Stream olarak kullanılabilir.

Örneğin kodda veri okumak ve yazmak için " _read(size) " ve " _write(chunk, encoding, callback) " yöntemleri kullanılır. Bu iki yöntem duplex stream oluştururken en önemli iki yöntemdir.

Duplex Stream oluşturma yöntemleri oldukça basit olmakla birlikte, özel durumlar için çeşitli parametreler de sunarlar. Bu özellikleri kullanarak Duplex Stream oluşturabilir ve uygulama açısından olası tüm senaryolara karşı hazırlıklı olabilirsiniz.


Duplex Stream Kullanımı

Duplex Stream, hem veri okuma hem de yazma işlemlerini aynı anda yapabilen bir akış türüdür. Bu sayede, bir veri akışı boyunca hem okuma hem de yazma işlemleri gerçekleştirilebilir. Duplex Stream kullanarak veri okuma ve yazma işlemlerini gerçekleştirmek oldukça basittir. Öncelikle, bir Duplex Stream oluşturmanız gerekir.

Bunun için stream.Duplex() yöntemi kullanılır. Örneğin;

Örnek Kod
        const { Duplex } = require('stream');        const duplexStream = new Duplex({          read(size) {            ...          },          write(chunk, encoding, callback) {            ...          }        });      

Burada, Duplex Stream oluşturmak için Duplex() yöntemi kullanılmış ve read() ve write() fonksiyonları tanımlanmıştır. read() fonksiyonu, akıştan veri okuma işlemi için kullanılırken, write() fonksiyonu ise akışa veri yazma işlemi için kullanılır.

Ardından, oluşturduğumuz Duplex Stream üzerinden veri okuma ve yazma işlemleri gerçekleştirebiliriz. Bunun için pipe() yöntemi kullanılır. Örneğin;

Örnek Kod
        const { Duplex } = require('stream');        const duplexStream = new Duplex({          read(size) {            ...          },          write(chunk, encoding, callback) {            ...          }        });        // veri okuma işlemi        duplexStream.on('data', (chunk) => {          console.log(`Okunan Veri: ${chunk.toString()}`);        });        // veri yazma işlemi        duplexStream.write('Merhaba Dünya');        duplexStream.end();      

Bu örnekte, on() yöntemi kullanarak Duplex Stream üzerinden veri okuma işlemi gerçekleştirilirken, write() yöntemi kullanılarak da veri yazma işlemi gerçekleştirilmiştir.

İşte bu kadar! Duplex Stream kullanarak veri okuma ve yazma işlemlerini gerçekleştirmek oldukça basittir. Sıradaki adım, PassThrough Stream kullanımıdır.


Duplex Stream Örnekleri

Duplex Stream kullanarak birçok farklı işlem gerçekleştirebilirsiniz. İşte, birkaç örnek:

  • Bir dosyayı okuyun ve içeriği benzersiz bir şekilde değiştirin.
  • Bir dosyayı okuyun ve daha büyük bir dosyaya yazın.
  • İki ayrı dosyayı okuyun ve içeriklerini karşılaştırın.
  • CSV dosyalarını okuyun ve düzenleyin.
  • Dosyaları veya klasörleri arayın ve Log dosyasına sonuçları kaydedin.

Duplex Stream, bu ve benzeri birçok işlem için ideal bir çözümdür. Bu nedenle işlem yapmanız gereken durumlarda Duplex Stream'i kullanmayı denemek isteyebilirsiniz.


PassThrough Stream Kullanımı

PassThrough Stream, akış içindeki verileri değiştirmeden geçiren bir akış türüdür. Bu Stream, gelen verinin işlenmesi gerekmeksizin işleme ekleme yapmak isteyenler tarafından yaygın olarak kullanılır.

PassThrough Stream, veri değiştirme işlemi gerektirmeyen durumlarda kullanışlıdır. Örneğin, gelen verileri bir yerden başka bir yere iletmek veya birçok işlemden geçirilmeden önce verileri filtrelendirmek isteyenler için ideal bir seçimdir.

PassThrough Stream ile gelen veriler, tamamen değişmeden akışın sonuna kadar geçirilir. PassThrough Stream'in birçok kullanım durumu vardır, örneğin, akışın önceden belirlenmiş bir sıralama düzenlemesi gerektiğinde veya akış içindeki verinin sadece bir kısmının işlenmesi gerektiğinde, genellikle PassThrough Stream kullanılır.


PassThrough Stream İlkeleri

PassThrough Stream, gelen verileri değiştirmeden geçiren bir akış türüdür. Veriler, alındığı şekilde aynı şekilde geçirilir ve hiçbir veri transformasyonu yapılmaz. Bu, bir veri akışının sadece bir noktadan geçirilmesi gerektiği durumlarda oldukça kullanışlıdır.

PassThrough Stream, kullanım durumlarına örneğin dosya aktarma işlemleri gibi bir veri akışının doğrudan geçirilmesi gerektiği durumlarda oldukça idealdir. Ayrıca, PassThrough Stream oluşturma ve kullanmada oldukça basittir.


PassThrough Stream Oluşturma

PassThrough Stream, gelen verileri değiştirmeden geçiren bir akış türüdür. PassThrough Stream oluşturmak oldukça basittir ve Readable Stream olduğu gibi verileri okur ve Writable Stream gibi de verileri yazdırır. PassThrough Stream, işlem yapmadan verileri geçirdiğinden, oluşturmak için herhangi bir özel işleme veya manipülasyona ihtiyaç yoktur.

PassThrough Stream oluşturmak için, "stream" modülündeki "PassThrough()" yöntemini kullanabiliriz. Bu yöntem, yeni bir PassThrough Stream nesnesini oluşturur. Ayrıca, PassThrough Stream'ini oluşturmak için bir sınıf oluşturabiliriz. Bu sınıf, PassThrough Stream'i özelleştirmek için kullanılabilir.

Aşağıdaki örnek, "stream" modülündeki "PassThrough()" yöntemini kullanarak basit bir PassThrough Stream örneği gösterir:

```javascriptconst { PassThrough } = require('stream');

// PassThrough Stream oluşturmaconst passThroughStream = new PassThrough();

// Verilere erişmek için 'data' olayını dinlemepassThroughStream.on('data', (chunk) => { console.log(`PassThrough Stream'den alınan veri: ${chunk}`);});

// Verileri yazdırmak için 'end' olayını dinlemepassThroughStream.on('end', () => { console.log('PassThrough Stream bitti.');});

// Verileri PassThrough Stream'e yazdırmapassThroughStream.write('Merhaba');passThroughStream.write('Dünya');passThroughStream.end();```

Yukarıdaki örnekte, "PassThrough()" yöntemi kullanılarak yeni bir PassThrough Stream nesnesi oluşturulur. "data" ve "end" olayları dinlenir ve veriler PassThrough Stream'e yazdırılır. "write()" yöntemi, verileri PassThrough Stream'e yazdırmak için kullanılır ve "end()" yöntemi PassThrough Stream'in sonlandırılmasını sağlar.

PassThrough Stream, gelen verileri değiştirmediği için, genellikle verilerin filtrasyona veya manipülasyona ihtiyaç duymadığı durumlarda kullanılır. Özellikle bir yerde veri işleme gerektiği ancak veri manipülasyonu gerektirmediği yerlerde kullanımı oldukça uygundur.


PassThrough Stream Kullanımı

PassThrough Stream, gelen verileri hiçbir değişiklik yapmaksızın geçiren bir akış türüdür. Bu özellik, gelen verilerin aktarılmasını sadece bir köprü gibi sağlar. Örneğin, bir dosyanın okunması ve yazılması sırasında verilerin hiçbir şekilde değiştirilmesini istemiyorsak PassThrough Stream kullanabiliriz.

PassThrough Stream kullanarak veri geçirme işlemlerini gerçekleştirmek oldukça basittir. Öncelikle geçirilecek verileri bir başka akışa bağlamalıyız. Daha sonra, bu akışı oluşturduğumuz PassThrough Stream'e bağlamalıyız. Bu işlemi gerçekleştirdikten sonra, gelen veriler hiçbir şekilde değişmeden, sadece aktarım yaparak hedef akışa ulaşır.

Bir örnek vermek gerekirse, bir video dosyası üzerinde çalışıyorsak ve videonun sadece belirli bir kısmına erişmek istiyorsak, bunu yapmak için PassThrough Stream kullanabiliriz. İlk olarak, okuma işlemi için Readable Stream oluştururuz. Daha sonra, Readable Stream'i PassThrough Stream'e bağlarız ve kullanıcının erişmek istediği kısmı yazdırırız. Bu işlem sırasında veriler hiçbir şekilde değiştirilmeden, sadece aktarım işlemi gerçekleşir.


PassThrough Stream Örnekleri

PassThrough Stream kullanarak verileri değiştirmeden geçirme işlevi verimli bir yöntemdir. Bu, özellikle verinin tercih edilen formatında olduğu durumlarda kullanışlıdır. PassThrough Stream örneği yaparak bu yöntemin ne kadar etkili olduğunu daha iyi anlayabilirsiniz.

Örnek 1:

Görev Açıklama Kod
PassThrough Stream oluşturma Bir yazı dizisi verisi oluşturun ve PassThrough Stream kullanarak verileri geçirin.
const { PassThrough } = require('stream');let pass = new PassThrough();let data = "Bu bir PassThrough Stream örneğidir";            data = Buffer.from(data);pass.write(data);pass.end();pass.pipe(process.stdout);

Örnek 2:

Görev Açıklama Kod
PassThrough Stream oluşturma Bir metin dosyasına veri yazmak için PassThrough Stream kullanın.
const { createWriteStream } = require('fs');const { PassThrough } = require('stream');let pass = new PassThrough();pass.pipe(createWriteStream("data.txt"));let data = "Bu bir PassThrough Stream örneğidir";data = Buffer.from(data);pass.write(data);pass.end();

Bu örnekler, PassThrough Stream'in veri geçirme işleminde ne kadar etkili olduğunu gösteriyor. Bu yöntem, veri değişikliği yapmadan, düzgün ve hızlı bir şekilde işleme yapmanıza yardımcı olabilir.


Stream İşleme Yöntemleri Arasındaki Farklar

Duplex ve PassThrough Stream işleme yöntemleri arasındaki en büyük fark, Duplex Stream'in hem okuma hem de yazma işlemlerini desteklemesidir, PassThrough Stream ise gelen verileri değiştirmeden geçiren akış türüdür.

Duplex Stream'in kullanımı, iki yönlü veri aktarımı gerektiren durumlarda idealdir. Örneğin, istemciden sunucuya veri gönderirken ve sunucudan istemciye veri alırken Duplex Stream kullanılabilir. PassThrough Stream'in kullanımı ise, gelen verilerin değiştirilmeden farklı işlemlerden geçirilmesi gereken durumlarda idealdir.

Ayrıca, Duplex Stream kullanıldığında, herhangi bir işlem sonrasında istemci ya da sunucudan veri alınabilirken, PassThrough Stream sadece gelen verilerin geçirilmesini sağlar.

Hangi yöntemin kullanılacağına karar vermek, kullanım senaryosuna bağlıdır. Bir örnek olarak, bir dosya aktarım uygulaması yazarken, Duplex Stream kullanarak dosyayı okumak ve yazmak için kullanılabilir. Ancak, bir veri dosyasını bir kaynaktan bir hedefe geçirmek için, PassThrough Stream kullanılabilir.