स्ट्रीम
Node.js में स्ट्रीम डेटा के लगातार प्रवाह को संभालने का एक महत्वपूर्ण और शक्तिशाली तरीका है। स्ट्रीम का उपयोग तब किया जाता है जब बड़ी फ़ाइलों, नेटवर्क डेटा या वास्तविक समय के डेटा को पूरी तरह से मेमोरी में लोड किए बिना प्रोसेस करना आवश्यक हो। स्ट्रीम एप्लिकेशन की प्रदर्शन क्षमता और मेमोरी दक्षता को बढ़ाते हैं क्योंकि वे Node.js के इवेंट-ड्रिवेन, नॉन-ब्लॉकिंग I/O मॉडल का उपयोग करते हैं।
इस ट्यूटोरियल में हम स्ट्रीम के चार मुख्य प्रकारों को कवर करेंगे: Readable, Writable, Duplex और Transform स्ट्रीम। आप सीखेंगे कि कैसे डेटा पाइपलाइन बनाई जाती है, एल्गोरिदमिक डेटा परिवर्तन किए जाते हैं, और OOP सिद्धांतों का पालन करते हुए पुन: प्रयोज्य और मॉड्यूलर कोड विकसित किया जाता है। विशेष ध्यान मेमोरी प्रबंधन, त्रुटि हैंडलिंग और प्रदर्शन अनुकूलन पर होगा, जो किसी भी प्रोडक्शन स्तर की Node.js एप्लिकेशन के लिए आवश्यक हैं।
अंत में, आप स्ट्रीम का उपयोग करके बड़े डेटा सेट को प्रभावी ढंग से प्रोसेस करना, वास्तविक समय डेटा हैंडलिंग लागू करना, और सुरक्षित, कुशल और स्केलेबल Node.js एप्लिकेशन विकसित करना सीखेंगे। आप स्ट्रीम के डिबगिंग और मॉनिटरिंग तकनीकों से परिचित होंगे, जिससे आपके एप्लिकेशन स्थिर और विश्वसनीय बने रहेंगे।
मूल उदाहरण
textconst fs = require('fs');
// Readable स्ट्रीम बनाना
const readableStream = fs.createReadStream('input.txt', { encoding: 'utf8' });
// Writable स्ट्रीम बनाना
const writableStream = fs.createWriteStream('output.txt');
// डेटा chunk-wise प्रोसेस करना
readableStream.on('data', (chunk) => {
console.log('पढ़ा गया chunk लंबाई:', chunk.length);
writableStream.write(chunk);
});
readableStream.on('end', () => {
console.log('पढ़ना समाप्त हुआ');
writableStream.end();
});
readableStream.on('error', (err) => {
console.error('Readable स्ट्रीम में त्रुटि:', err);
});
writableStream.on('finish', () => {
console.log('लिखना समाप्त हुआ');
});
इस उदाहरण में हमने Node.js में स्ट्रीम का बुनियादी उपयोग दिखाया है। Readable स्ट्रीम फ़ाइल को chunk-wise पढ़ता है, जिससे बड़ी फ़ाइलों को मेमोरी में पूरी तरह लोड किए बिना प्रोसेस करना संभव होता है। Writable स्ट्रीम हर chunk को आउटपुट फ़ाइल में लिखता है। 'data' इवेंट हर chunk को प्रोसेस करता है, 'end' इवेंट पढ़ने के अंत को संकेत करता है, और 'error' इवेंट संभावित त्रुटियों को संभालता है।
यह chunk-wise प्रोसेसिंग backpressure को भी संभालती है। कोड में Node.js के Buffer, asynchronous callbacks और modular syntax का प्रयोग किया गया है। यह पैटर्न बड़े डेटा प्रोसेसिंग, नेटवर्क स्ट्रीमिंग और वास्तविक समय डेटा प्रोसेसिंग के लिए आधार प्रदान करता है।
व्यावहारिक उदाहरण
textconst { Transform, pipeline } = require('stream');
const fs = require('fs');
// Transform स्ट्रीम: टेक्स्ट को uppercase में बदलना
const upperCaseTransform = new Transform({
transform(chunk, encoding, callback) {
this.push(chunk.toString().toUpperCase());
callback();
}
});
// पाइपलाइन का सुरक्षित उपयोग
pipeline(
fs.createReadStream('input.txt'),
upperCaseTransform,
fs.createWriteStream('output_uppercase.txt'),
(err) => {
if (err) {
console.error('स्ट्रीम पाइपलाइन में त्रुटि:', err);
} else {
console.log('फ़ाइल सफलतापूर्वक uppercase में परिवर्तित हुई');
}
}
);
इस उन्नत उदाहरण में Transform स्ट्रीम का उपयोग करके डेटा को प्रोसेस किया गया है। प्रत्येक chunk uppercase में बदल दिया जाता है। pipeline फ़ंक्शन कई स्ट्रीम्स को जोड़ता है और त्रुटियों तथा संसाधन मुक्त करने की जिम्मेदारी संभालता है।
यह पैटर्न OOP सिद्धांतों का पालन करता है, क्योंकि transformation logic को encapsulated object में रखा गया है। Transform स्ट्रीम का उपयोग encryption, compression या filtering के लिए भी किया जा सकता है। त्रुटि हैंडलिंग, modularity और performance optimization इस उदाहरण की मुख्य विशेषताएं हैं, जो बड़े डेटा प्रोसेसिंग और वास्तविक समय एप्लिकेशन के लिए महत्वपूर्ण हैं।
Node.js में स्ट्रीम के लिए best practices में pipeline का उपयोग, Transform स्ट्रीम में modular logic, और backpressure का प्रबंधन शामिल है। प्रत्येक स्ट्रीम में 'error' listener का होना अनिवार्य है, ताकि unhandled exceptions और memory leaks से बचा जा सके।
📊 संदर्भ तालिका
Node.js Element/Concept | Description | Usage Example |
---|---|---|
Readable Stream | Chunk-wise डेटा पढ़ना | fs.createReadStream('file.txt') |
Writable Stream | Chunk-wise डेटा लिखना | fs.createWriteStream('output.txt') |
Transform Stream | डेटा को प्रवाह में बदलना | new Transform({ transform(chunk, enc, cb){ cb(null, chunk.toString().toUpperCase()); } }) |
Duplex Stream | एक साथ पढ़ना और लिखना | const duplex = new Duplex({ read(){}, write(chunk, enc, cb){ cb(); } }) |
Pipeline | स्ट्रीम को सुरक्षित जोड़ना | pipeline(readable, transform, writable, err=>{...}) |
इस ट्यूटोरियल के बाद, आप Node.js में स्ट्रीम के core और advanced concepts में दक्ष हो जाएंगे। आप Readable, Writable, Transform और Duplex स्ट्रीम को समझेंगे और pipeline के सुरक्षित उपयोग से वास्तविक समय डेटा प्रोसेसिंग कर सकेंगे।
आगे के अध्ययन के लिए network streams, HTTP streaming और advanced event-driven patterns पर ध्यान दें। प्रैक्टिकल प्रोजेक्ट्स जैसे log processing, file conversion या streaming APIs से अभ्यास करें। संसाधन में official Node.js documentation, GitHub projects और developer communities शामिल हैं, जो आपके Node.js कौशल को मजबूत बनाएंगे।
🧠 अपने ज्ञान की परीक्षा करें
अपने ज्ञान की परीक्षा करें
इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी