Rumah > hujung hadapan web > tutorial js > Asas -asas aliran node.js

Asas -asas aliran node.js

Lisa Kudrow
Lepaskan: 2025-02-20 10:07:10
asal
266 orang telah melayarinya

The Basics of Node.js Streams

node.js, yang tidak segerak dan didorong oleh peristiwa, cemerlang dalam operasi I/O terikat. Memanfaatkan aliran Node.js dengan ketara memudahkan tugas -tugas ini dengan memproses data dengan cekap dalam ketulan yang lebih kecil. Mari kita menyelidiki dunia aliran dan lihat bagaimana mereka menyelaraskan i/o.

Konsep Utama:

    aliran node.js, asynchronous dan event-driven, mengoptimumkan I/O dengan mengendalikan data dalam bahagian yang boleh diurus.
  • aliran diklasifikasikan sebagai boleh dibaca, boleh ditulis, atau dupleks (kedua -duanya boleh dibaca dan boleh ditulis). Aliran yang boleh dibaca mengambil data dari sumber; aliran yang boleh ditulis menghantar data ke destinasi.
  • fungsi
  • tidak ternilai, memudahkan pemindahan data lancar antara sumber dan destinasi tanpa pengurusan aliran manual. pipe()
  • kaedah seperti
  • , Readable.pause(), dan Readable.resume() menawarkan kawalan berbutir ke atas aliran data, meningkatkan fungsi aliran. readable.unpipe()

Memahami Streams:

aliran sama dengan paip UNIX, membolehkan pemindahan data tanpa usaha dari sumber ke destinasi. Pada asasnya, aliran adalah

dengan kaedah khusus. Kaedah yang dilaksanakan menentukan sama ada aliran boleh dibaca, boleh ditulis, atau dupleks. Aliran yang boleh dibaca memberikan input data; Aliran yang boleh ditulis mengendalikan output data. EventEmitter

Anda mungkin menemui aliran di node.js sudah. Dalam pelayan HTTP, permintaan itu adalah aliran yang boleh dibaca, dan tindak balasnya adalah aliran yang boleh ditulis. Modul

menyediakan keupayaan aliran fail yang boleh dibaca dan ditulis. fs

Artikel ini memberi tumpuan kepada aliran yang boleh dibaca dan ditulis; aliran dupleks berada di luar skopnya.

aliran yang boleh dibaca:

Aliran yang boleh dibaca membaca data dari sumber (fail, penampan dalam memori, atau aliran lain). Menjadi

s, mereka mencetuskan pelbagai peristiwa. Kami menggunakan peristiwa ini untuk berinteraksi dengan sungai. EventEmitter

Membaca dari sungai:

Pendekatan yang paling biasa adalah untuk mendengar acara

dan melampirkan panggilan balik. Apabila data tersedia, kebakaran acara data, melaksanakan panggilan balik. data

const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
readableStream.on('data', (chunk) => { data += chunk; });
readableStream.on('end', () => { console.log(data); });
Salin selepas log masuk
Salin selepas log masuk

Mewujudkan aliran yang boleh dibaca. Pada mulanya statik, ia mula mengalir apabila melampirkan pendengar acara fs.createReadStream(). Potongan data kemudiannya diserahkan kepada panggilan balik. Kekerapan peristiwa data ditentukan oleh pelaksanaan aliran (mis., Permintaan HTTP mungkin memancarkan peristiwa setiap kb, manakala aliran fail mungkin memancarkan setiap baris). data

acara

memberi isyarat akhir data. end

secara alternatif, berulang kali panggil

pada contoh aliran sehingga semua data dibaca: read()

const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
readableStream.on('data', (chunk) => { data += chunk; });
readableStream.on('end', () => { console.log(data); });
Salin selepas log masuk
Salin selepas log masuk

read() mengambil data dari penampan dalaman. Ia kembali null apabila tiada data kekal. Acara readable menunjukkan ketersediaan data.

Menetapkan Pengekodan:

Data biasanya objek Buffer. Untuk rentetan, gunakan Readable.setEncoding():

const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
let chunk;
readableStream.on('readable', () => {
  while ((chunk = readableStream.read()) !== null) {
    data += chunk;
  }
});
readableStream.on('end', () => { console.log(data); });
Salin selepas log masuk

ini menafsirkan data sebagai UTF-8, menyampaikannya sebagai rentetan ke panggil balik.

Piping:

Piping memudahkan pemindahan data antara sumber dan destinasi:

const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
readableStream.setEncoding('utf8');
readableStream.on('data', (chunk) => { data += chunk; });
readableStream.on('end', () => { console.log(data); });
Salin selepas log masuk

pipe() Mengendalikan aliran data secara automatik.

Chaining:

aliran boleh dirantai:

const fs = require('fs');
const readableStream = fs.createReadStream('file1.txt');
const writableStream = fs.createWriteStream('file2.txt');
readableStream.pipe(writableStream);
Salin selepas log masuk

Decompresses ini input.txt.gz dan menulis hasilnya kepada output.txt.

kaedah aliran boleh dibaca tambahan:

  • Readable.pause(): Jeda aliran.
  • Readable.resume(): Sambungkan aliran yang dijeda.
  • readable.unpipe(): Mengeluarkan aliran destinasi dari paip.

Streams wrable:

Stream yang boleh ditulis menghantar data ke destinasi. Seperti aliran yang boleh dibaca, mereka EventEmitter s.

Menulis ke sungai:

Gunakan write() untuk menghantar data:

const fs = require('fs');
const zlib = require('zlib');
fs.createReadStream('input.txt.gz')
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream('output.txt'));
Salin selepas log masuk

write() Mengembalikan kejayaan yang menunjukkan boolean. Jika palsu, aliran itu penuh sepenuhnya; Tunggu acara drain sebelum menulis lebih lanjut.

Akhir data:

Panggil end() untuk memberi isyarat kepada akhir data. Acara finish dipancarkan selepas semua data dibuang. Anda tidak boleh menulis selepas memanggil end().

Peristiwa Stream yang penting:

  • error: Menunjukkan ralat.
  • pipe: dipancarkan apabila aliran yang boleh dibaca disalurkan.
  • unpipe: dipancarkan apabila unpipe() dipanggil pada aliran yang boleh dibaca.

Kesimpulan:

aliran adalah ciri yang kuat dalam node.js, meningkatkan kecekapan I/O. Memahami aliran, paip, dan chaining membolehkan menulis kod yang bersih dan pelukis.

Node.js Streams FAQ:

  • Apakah aliran Node.js?

  • Jenis utama aliran Node.js?

    Membuat aliran yang boleh dibaca? Gunakan
  • dan melaksanakan kaedah
  • .

    stream.Readable _read Kes penggunaan biasa untuk aliran yang boleh dibaca?

    Membaca fail besar, memproses data dari permintaan HTTP, pengendalian data masa nyata.
  • Membuat aliran yang boleh ditulis? Gunakan

    dan melaksanakan kaedah
  • .
  • Kegunaan umum aliran yang boleh ditulis? Menyimpan data ke fail, menghantar data ke perkhidmatan.

  • aliran dupleks? menggabungkan fungsi yang boleh dibaca dan ditulis.

  • Transformasi Streams? Ubah suai data ketika ia melewati (mis., Mampatan, penyulitan).

  • data paip antara aliran? Gunakan kaedah .pipe().

  • Amalan terbaik untuk bekerja dengan aliran Node.js? util.promisify

Atas ialah kandungan terperinci Asas -asas aliran node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan