في هذه المقالة، سنتعمق في Node.js Streams ونفهم كيف تساعد في معالجة كميات كبيرة من البيانات بكفاءة. توفر التدفقات طريقة أنيقة للتعامل مع مجموعات البيانات الكبيرة، مثل قراءة الملفات الكبيرة أو نقل البيانات عبر الشبكة أو معالجة المعلومات في الوقت الفعلي. على عكس عمليات الإدخال/الإخراج التقليدية التي تقرأ أو تكتب البيانات بالكامل مرة واحدة، تقوم التدفقات بتقسيم البيانات إلى أجزاء يمكن التحكم فيها ومعالجتها قطعة قطعة، مما يسمح باستخدام الذاكرة بكفاءة.
في هذا المقال سنتناول:
التدفق في Node.js هو تدفق مستمر للبيانات. تعتبر التدفقات مفيدة بشكل خاص للتعامل مع المهام المرتبطة بالإدخال/الإخراج، مثل قراءة الملفات، أو الاتصال عبر الشبكة، أو التفاعل مع قواعد البيانات. بدلاً من انتظار اكتمال العملية بأكملها، تتيح التدفقات إمكانية معالجة البيانات في أجزاء.
الميزات الرئيسية للتدفقات:
3.1 تيارات قابلة للقراءة
التدفقات القابلة للقراءة تسمح لك بقراءة البيانات قطعة قطعة، وهو أمر مفيد للتعامل مع الملفات الكبيرة أو مصادر البيانات في الوقت الحقيقي.
const fs = require('fs'); // أنشئ دفقًا قابلاً للقراءة من ملف كبير const readableStream = fs.createReadStream('largeFile.txt', { الترميز: "utf8"، HighWaterMark: 16 * 1024 // 16 كيلو بايت حجم القطعة }); readableStream.on('data', (chunk) => { console.log('تم استلام قطعة جديدة:', Chunk); }); readableStream.on('end', () => { console.log("اكتملت قراءة الملف"); });const fs = require('fs'); // Create a readable stream from a large file const readableStream = fs.createReadStream('largeFile.txt', { encoding: 'utf8', highWaterMark: 16 * 1024 // 16 KB chunk size }); readableStream.on('data', (chunk) => { console.log('New chunk received:', chunk); }); readableStream.on('end', () => { console.log('Reading file completed'); });
يتم استخدام التدفقات القابلة للكتابة لكتابة البيانات بشكل متزايد إلى وجهة ما، مثل ملف أو مقبس شبكة.
const fs = require('fs'); // قم بإنشاء دفق قابل للكتابة لكتابة البيانات إلى ملف const writableStream = fs.createWriteStream('output.txt'); writableStream.write('مرحبا بالعالم!\n'); writableStream.write('كتابة مجموعة البيانات قطعة تلو الأخرى.\n'); // إنهاء الدفق وإغلاق الملف writableStream.end(() => { console.log("اكتملت كتابة الملف"); });const fs = require('fs'); // Create a readable stream from a large file const readableStream = fs.createReadStream('largeFile.txt', { encoding: 'utf8', highWaterMark: 16 * 1024 // 16 KB chunk size }); readableStream.on('data', (chunk) => { console.log('New chunk received:', chunk); }); readableStream.on('end', () => { console.log('Reading file completed'); });
قراءة البيانات وكتابتها. أحد الأمثلة الشائعة هو مقبس TCP، الذي يمكنه إرسال واستقبال البيانات في وقت واحد. const net = require('net'); // إنشاء دفق مزدوج (خادم صدى بسيط) خادم const = net.createServer((socket) => { المقبس.on('بيانات', (بيانات) => { console.log('تم الاستلام:', data.toString()); // صدى البيانات مرة أخرى إلى العميل المقبس.write(`الصدى: ${data}`); }); المقبس.on('end', () => { console.log("الاتصال مغلق"); }); }); server.listen(8080, () => { console.log("الخادم يستمع على المنفذ 8080"); });
const net = require('net'); // Create a duplex stream (a simple echo server) const server = net.createServer((socket) => { socket.on('data', (data) => { console.log('Received:', data.toString()); // Echo the data back to the client socket.write(`Echo: ${data}`); }); socket.on('end', () => { console.log('Connection closed'); }); }); server.listen(8080, () => { console.log('Server listening on port 8080'); });يقوم هذا المثال بإنشاء خادم صدى أساسي يقرأ البيانات الواردة من العميل ويرسلها مرة أخرى.
هو نوع خاص من التدفق المزدوج الذي يعدل البيانات أثناء مرورها. إحدى حالات الاستخدام الشائعة هي ضغط الملفات. const fs = require('fs'); const zlib = require('zlib'); // قم بإنشاء دفق قابل للقراءة لملف ودفق قابل للكتابة لملف الإخراج const readable = fs.createReadStream('input.txt'); const writable = fs.createWriteStream('input.txt.gz'); // قم بإنشاء دفق تحويل يضغط الملف const gzip = zlib.createGzip(); // قم بتوصيل الدفق القابل للقراءة إلى دفق التحويل، ثم إلى الدفق القابل للكتابة readable.pipe(gzip).pipe(writable); writable.on('finish', () => { console.log("تم ضغط الملف بنجاح"); });
const net = require('net'); // Create a duplex stream (a simple echo server) const server = net.createServer((socket) => { socket.on('data', (data) => { console.log('Received:', data.toString()); // Echo the data back to the client socket.write(`Echo: ${data}`); }); socket.on('end', () => { console.log('Connection closed'); }); }); server.listen(8080, () => { console.log('Server listening on port 8080'); });يتم استخدام طريقة الأنابيب لتوجيه تدفق البيانات من تيار إلى آخر.
في المقالة التالية، سنستكشف
NGINXودوره في خدمة المحتوى الثابت، وموازنة التحميل، والعمل كوكيل عكسي في تطبيقات Node.js. سنناقش أيضًا كيفية دمج SSL والتشفير لتعزيز الأمان.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3