تعد التدفقات في Node.js طريقة قوية للتعامل مع قراءة البيانات وكتابتها بطريقة مستمرة. فهي تسمح لك بمعالجة البيانات بكفاءة، خاصة عند التعامل مع كميات كبيرة من المعلومات أو عمليات الإدخال/الإخراج. سيغطي هذا الدليل أنواع التدفقات وكيفية استخدامها وأمثلة عملية لمساعدتك على فهم كيفية عمل التدفقات في Node.js.
التدفقات هي كائنات تسمح لك بقراءة البيانات من مصدر أو كتابة البيانات إلى وجهة بطريقة مستمرة. إنها مثالية لمعالجة البيانات قطعة قطعة بدلاً من قراءة أو كتابة ملفات أو مخازن مؤقتة بأكملها مرة واحدة. يعد هذا مفيدًا بشكل خاص عند العمل مع مجموعات البيانات الكبيرة، لأنه يمكن أن يقلل بشكل كبير من استخدام الذاكرة.
التدفقات القابلة للقراءة : تتيح لك هذه التدفقات قراءة البيانات. تتضمن الأمثلة fs.createReadStream() وhttp.IncomingMessage.
التدفقات القابلة للكتابة : تسمح لك هذه التدفقات بكتابة البيانات. تتضمن الأمثلة fs.createWriteStream() وhttp.ServerResponse.
التدفقات المزدوجة : يمكن لهذه التدفقات قراءة البيانات وكتابتها. تتضمن الأمثلة مآخذ TCP وnet.Duplex.
تحويل التدفقات : هذا هو نوع من التدفق المزدوج الذي يمكنه تعديل البيانات أثناء قراءتها أو كتابتها. تتضمن الأمثلة zlib.createGzip() للضغط.
يمكنك إنشاء دفق قابل للقراءة باستخدام وحدة fs المدمجة لقراءة الملفات أو استخدام دفق. قابل للقراءة لإنشاء تدفقات مخصصة قابلة للقراءة.
const fs = require('fs'); // Create a readable stream const readableStream = fs.createReadStream('example.txt', { encoding: 'utf8' }); // Handling the 'data' event readableStream.on('data', (chunk) => { console.log('New chunk received:', chunk); }); // Handling the 'end' event readableStream.on('end', () => { console.log('No more data to read.'); });
const { Readable } = require('stream'); class MyReadableStream extends Readable { constructor(options) { super(options); this.current = 0; } _read(size) { if (this.current { console.log('Received:', chunk.toString()); });
يمكنك إنشاء تدفقات قابلة للكتابة باستخدام الوحدة fs أو عن طريق توسيع فئةstream.Writable.
const fs = require('fs'); // Create a writable stream const writableStream = fs.createWriteStream('output.txt'); // Write data to the stream writableStream.write('Hello, World!\n'); writableStream.write('Writing to a file using streams.\n'); // End the stream writableStream.end(() => { console.log('Finished writing to file.'); });
const { Writable } = require('stream'); class MyWritableStream extends Writable { _write(chunk, encoding, callback) { console.log('Writing:', chunk.toString()); callback(); // Call when done } } const myWritableStream = new MyWritableStream(); myWritableStream.write('Hello, World!\n'); myWritableStream.write('Writing to custom writable stream.\n'); myWritableStream.end();
يمكن للتدفقات المزدوجة قراءة البيانات وكتابتها في وقت واحد. حالة الاستخدام الشائعة هي مآخذ TCP.
const { Duplex } = require('stream'); class MyDuplexStream extends Duplex { _read(size) { this.push('Data from duplex stream\n'); this.push(null); // No more data } _write(chunk, encoding, callback) { console.log('Received:', chunk.toString()); callback(); } } const myDuplexStream = new MyDuplexStream(); myDuplexStream.on('data', (chunk) => { console.log('Reading:', chunk.toString()); }); // Write to the duplex stream myDuplexStream.write('Hello, Duplex!\n'); myDuplexStream.end();
تعتبر تدفقات التحويل مفيدة لتعديل البيانات أثناء تدفقها عبر الدفق. على سبيل المثال، يمكنك استخدام دفق تحويل لضغط البيانات.
const { Transform } = require('stream'); class MyTransformStream extends Transform { _transform(chunk, encoding, callback) { const upperChunk = chunk.toString().toUpperCase(); this.push(upperChunk); callback(); } } const myTransformStream = new MyTransformStream(); myTransformStream.on('data', (chunk) => { console.log('Transformed:', chunk.toString()); }); // Pipe data through the transform stream process.stdin.pipe(myTransformStream).pipe(process.stdout);
إحدى الميزات القوية للتدفقات هي القدرة على ربطها معًا. تسمح لك الأنابيب بتوصيل دفق قابل للقراءة إلى دفق قابل للكتابة، مما يجعل من السهل نقل البيانات.
const fs = require('fs'); // Create a readable stream const readableStream = fs.createReadStream('input.txt'); // Create a writable stream const writableStream = fs.createWriteStream('output.txt'); // Pipe the readable stream to the writable stream readableStream.pipe(writableStream); writableStream.on('finish', () => { console.log('Data has been written to output.txt'); });
تُصدر التدفقات القابلة للقراءة العديد من الأحداث المهمة التي تساعدك على إدارة تدفق البيانات:
const fs = require('fs'); const readableStream = fs.createReadStream('example.txt'); readableStream.on('data', (chunk) => { console.log('Received chunk:', chunk.toString()); }); readableStream.on('end', () => { console.log('No more data to read.'); }); readableStream.on('error', (err) => { console.error('Error occurred:', err); }); readableStream.on('close', () => { console.log('Stream closed.'); });
تصدر التدفقات القابلة للكتابة أيضًا العديد من الأحداث:
const fs = require('fs'); const writableStream = fs.createWriteStream('output.txt'); writableStream.on('finish', () => { console.log('All data has been written to output.txt'); }); writableStream.on('error', (err) => { console.error('Error occurred:', err); }); // Writing data writableStream.write('Hello, World!\n'); writableStream.write('Writing to a file using streams.\n'); writableStream.end(); // Call end to finish the writing process
ترث تيارات التحويل الأحداث من كل من التدفقات القابلة للقراءة والكتابة، وتصدر:
const { Transform } = require('stream'); class MyTransformStream extends Transform { _transform(chunk, encoding, callback) { const upperChunk = chunk.toString().toUpperCase(); this.push(upperChunk); callback(); } } const myTransformStream = new MyTransformStream(); myTransformStream.on('data', (chunk) => { console.log('Transformed chunk:', chunk.toString()); }); myTransformStream.on('end', () => { console.log('No more data to transform.'); }); myTransformStream.on('error', (err) => { console.error('Error occurred:', err); }); // Write data to the transform stream myTransformStream.write('Hello, World!\n'); myTransformStream.write('Transforming this text.\n'); myTransformStream.end(); // End the stream
توفر التدفقات في Node.js طريقة قوية وفعالة للتعامل مع البيانات بطريقة مستمرة. إنها تسمح لك بقراءة البيانات وكتابتها قطعة قطعة، مما يجعلها مفيدة بشكل خاص لعمليات الإدخال/الإخراج والعمل مع مجموعات البيانات الكبيرة. إن فهم كيفية إنشاء واستخدام أنواع مختلفة من التدفقات، بالإضافة إلى كيفية التعامل مع الأحداث، سيساعدك على بناء تطبيقات أكثر كفاءة وقابلة للتطوير في Node.js.
سواء كنت تقوم بإنشاء تدفقات قابلة للقراءة، أو قابلة للكتابة، أو مزدوجة، أو تحويلية، فإن مرونة واجهة برمجة تطبيقات الدفق تسمح لك بالتعامل مع معالجة البيانات بطريقة تناسب احتياجات تطبيقك على أفضل وجه.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3