प्रकाशित/सब्सक्राइब संदेश प्रणाली लागू करना
विषय-आधारित संदेश वितरण के लिए WebSockets पर पब/सब प्रणाली का डिज़ाइन और निर्माण करें।
प्रकाशित/सब्सक्राइब संदेश प्रणाली लागू करना, CoddyKit पर WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
Pub/Sub संदेशों का परिचय
उन्नत WebSocket पैटर्न में आपका स्वागत है! आज हम Publish/Subscribe (Pub/Sub) संदेश प्रणाली का अध्ययन करेंगे, जो रीयल-टाइम डेटा को कुशलतापूर्वक वितरित करने का एक शक्तिशाली तरीका है।
एक ऐसे डिजिटल समाचारपत्र की कल्पना कीजिए, जिसमें आपको केवल उन्हीं विषयों के लेख मिलते हैं जिनमें आपकी रुचि है। यही Pub/Sub का उपयोग है!
यह लाइव चैट रूम, सोशल मीडिया फ़ीड, शेयर बाज़ार सूचकांक या गतिशील, विषय-आधारित अपडेट की आवश्यकता वाले किसी भी अनुप्रयोग जैसी सुविधाओं के लिए आदर्श है।
Pub/Sub के प्रमुख घटक
Pub/Sub प्रणाली में कुछ मुख्य घटक होते हैं:
- प्रकाशक: ये संदेश भेजने वाली इकाइयाँ होती हैं। इन्हें पता नहीं होता कि संदेश कौन प्राप्त करेगा।
- सदस्य: ये संदेश प्राप्त करने वाली इकाइयाँ होती हैं। ये विशिष्ट विषयों में अपनी रुचि व्यक्त करती हैं।
- विषय: ये संदेशों के लिए श्रेणियाँ या चैनल होते हैं। सदस्य उन विषयों से 'जुड़ते' हैं जिन्हें वे फ़ॉलो करना चाहते हैं।
- ब्रोकर: यह केंद्रीय घटक (हमारा WebSocket सर्वर) प्रकाशकों से संदेश प्राप्त करके उन्हें संबंधित सदस्यों तक पहुँचाता है।
ब्रोकर के रूप में WebSocket सर्वर
हमारी WebSocket Pub/Sub प्रणाली में WebSocket सर्वर ब्रोकर की भूमिका निभाता है।
इसकी जिम्मेदारियाँ होंगी:
- क्लाइंट कनेक्शन स्वीकार करना।
- यह सूची प्रबंधित करना कि कौन-से क्लाइंट किन विषयों के सदस्य हैं।
- 'प्रकाशक' क्लाइंट से संदेश प्राप्त करना।
- दिए गए विषय के सभी 'सदस्य' क्लाइंट तक उन संदेशों को वितरित करना।
हम सर्वर पर सदस्यताओं को संग्रहीत करने के लिए Map डेटा संरचना का उपयोग करेंगे, जिसमें प्रत्येक विषय का नाम जुड़े हुए WebSocket क्लाइंट ऑब्जेक्ट के Set से मैप किया जाएगा।
संदेश प्रारूप डिज़ाइन करना
हमारी Pub/Sub प्रणाली को काम करने के लिए क्लाइंट और सर्वर के बीच संचार का स्पष्ट तरीका होना चाहिए। हम सरल JSON संदेशों का उपयोग करेंगे।
1. सदस्यता संदेश (क्लाइंट से सर्वर):
{ "action": "subscribe", "topic": "chat:general" }2. प्रकाशन संदेश (क्लाइंट से सर्वर):
{ "action": "publish", "topic": "news", "payload": "Breaking: New feature released!" }3. वितरित संदेश (सर्वर से क्लाइंट):
{ "type": "message", "topic": "chat:general", "payload": "Hello everyone!" }सर्वर: मूल Pub/Sub तर्क
यह मूल Pub/Sub लागू करने वाला एक पूर्ण Node.js WebSocket सर्वर है। यह subscribe और publish, दोनों संदेशों को संभालता है।
इस कोड को चलाएँ (npm install ws के बाद node server.js) और फिर इसका परीक्षण करने के लिए अपने ब्राउज़र में क्लाइंट कनेक्ट करें!
const { WebSocketServer } = require('ws');
const wss = new WebSocketServer({ port: 8080 });
// Stores active subscriptions: Map<topic, Set<WebSocket>>
const subscriptions = new Map();
wss.on('connection', ws => {
console.log('Client connected.');
ws.on('message', message => {
try {
const data = JSON.parse(message.toString());
const { action, topic, payload } = data;
if (action === 'subscribe' && topic) {
if (!subscriptions.has(topic)) {
subscriptions.set(topic, new Set());
}
subscriptions.get(topic).add(ws);
ws.send(JSON.stringify({ status: 'subscribed', topic }));
console.log(`Client subscribed to '${topic}'.`);
} else if (action === 'publish' && topic && payload) {
const topicSubscribers = subscriptions.get(topic);
if (topicSubscribers) {
topicSubscribers.forEach(subscriber => {
if (subscriber.readyState === ws.OPEN) {
subscriber.send(JSON.stringify({ type: 'message', topic, payload }));
}
});
console.log(`Published to '${topic}': ${payload}.`);
} else {
ws.send(JSON.stringify({ error: `No subscribers for '${topic}'.` }));
}
} else {
ws.send(JSON.stringify({ error: 'Invalid message.' }));
}
} catch (e) {
console.error('Message error:', e.message);
ws.send(JSON.stringify({ error: 'JSON parse error.' }));
}
});
// Connection close and error handling in the next scene
});
console.log('Pub/Sub server running on ws://localhost:8080');सर्वर: कनेक्शन जीवनचक्र
विश्वसनीय Pub/Sub सर्वर के लिए कनेक्शन जीवनचक्र का प्रबंधन अत्यंत महत्वपूर्ण है। सर्वर को क्लाइंट के डिस्कनेक्ट होने की स्थिति को उचित ढंग से संभालना चाहिए।
- क्लाइंट के डिस्कनेक्ट होने पर
ws.on('close')इवेंट सक्रिय होता है। - इस हैंडलर के अंदर, हम सभी विषयों पर क्रम से चलते हैं और डिस्कनेक्ट हुए क्लाइंट को उन सभी सदस्यता सूचियों से हटा देते हैं जिनका वह हिस्सा था।
- क्लाइंट के जाने के बाद खाली हो जाने वाले विषयों को भी हम साफ़ कर देते हैं।
ws.on('error')हैंडलर संचार संबंधी त्रुटियों को पकड़ता है।
क्लाइंट: कनेक्ट करना और सदस्यता लेना
अब आइए क्लाइंट साइड देखते हैं, जो आमतौर पर वेब ब्राउज़र में चलता है। हम मूल WebSocket API का उपयोग करेंगे।
यह कोड अंश हमारे सर्वर से कनेक्ट होता है और किसी विशिष्ट विषय के लिए subscribe संदेश भेजता है।
याद रखें कि इस HTML फ़ाइल को ब्राउज़र में खोलें और अपना Node.js सर्वर चालू रखें!
<!-- index.html -->
<!DOCTYPE html>
<html>
<head><title>Pub/Sub Client</title></head>
<body>
<h1>Pub/Sub Client</h1>
<p>Status: <span id="status">Disconnected</span></p>
<ul id="messages"></ul>
<script>
const ws = new WebSocket('ws://localhost:8080');
const statusElem = document.getElementById('status');
const messagesElem = document.getElementById('messages');
ws.onopen = () => {
statusElem.textContent = 'Connected';
console.log('Connected to server');
// Subscribe to a topic
ws.send(JSON.stringify({ action: 'subscribe', topic: 'chat:general' }));
ws.send(JSON.stringify({ action: 'subscribe', topic: 'news' }));
};
ws.onclose = () => {
statusElem.textContent = 'Disconnected';
console.log('Disconnected from server');
};
ws.onerror = (error) => {
console.error('WebSocket Error:', error);
};
// Message handling in the next scene
</script>
</body>
</html>क्लाइंट: प्राप्त करना और दिखाना
सदस्यता लेने के बाद, क्लाइंट को सर्वर से आने वाले संदेशों को सुनना होता है। ws.onmessage इवेंट पर यही काम होता है।
जब कोई संदेश आता है, तो हम उसकी JSON सामग्री को पार्स कर सकते हैं और उपयोगकर्ता को दिखा सकते हैं, संभवतः संदेश के topic के आधार पर उसे फ़िल्टर या प्रारूपित करके।
एक से अधिक ब्राउज़र टैब खोलकर उनमें एक ही विषय की सदस्यता लेने का प्रयास करें। फिर एक टैब से (जैसे, कंसोल के माध्यम से) संदेश प्रकाशित करें और देखें कि वह अन्य टैब में दिखाई देता है!
<!-- index.html (continued script part) -->
// ... (ws.onopen, ws.onclose, ws.onerror from previous scene)
ws.onmessage = event => {
const data = JSON.parse(event.data);
console.log('Received:', data);
if (data.type === 'message') {
const listItem = document.createElement('li');
listItem.textContent = `[${data.topic}] ${data.payload}`;
messagesElem.appendChild(listItem);
} else if (data.status === 'subscribed') {
const listItem = document.createElement('li');
listItem.textContent = `Successfully subscribed to '${data.topic}'.`;
messagesElem.appendChild(listItem);
} else if (data.error) {
console.error('Server error:', data.error);
const listItem = document.createElement('li');
listItem.style.color = 'red';
listItem.textContent = `Error: ${data.error}`;
messagesElem.appendChild(listItem);
}
};
// Example of how a client could publish a message (e.g., via a button click)
// ws.send(JSON.stringify({ action: 'publish', topic: 'chat:general', payload: 'Hello from client!' }));
</script>
</body>
</html>उन्नत Pub/Sub पैटर्न
हालाँकि हमारी मूल Pub/Sub प्रणाली काम करती है, वास्तविक दुनिया के अनुप्रयोगों को अक्सर इससे अधिक सुविधाओं की आवश्यकता होती है:
- सदस्यता रद्द करना: क्लाइंट को किसी विषय के संदेश प्राप्त करना बंद करने में सक्षम होना चाहिए। इसके लिए एक नई संदेश क्रिया (जैसे,
{ "action": "unsubscribe", "topic": "news" }) और क्लाइंट को विषय की सदस्यता-समूह से हटाने वाला सर्वर-साइड तर्क आवश्यक होगा। - विषय पदानुक्रम:
news.*जैसे पैटर्न की सदस्यता लेने पर सभी समाचार उप-विषय प्राप्त करने की सुविधा। - संदेश स्थायित्व: संदेशों को संग्रहीत करना, ताकि नए सदस्य पिछले संदेश प्राप्त कर सकें (जैसे, चैट इतिहास)।
त्वरित जाँच
अभी बनाई गई Pub/Sub प्रणाली पर विचार करें। किसी विशिष्ट विषय पर प्रकाशित संदेश किन सदस्यों को प्राप्त होगा, इसका निर्णय मुख्य रूप से कौन-सा घटक करता है?
पुनरावलोकन और आगे की दिशा
बधाई हो! आपने WebSockets का उपयोग करके एक मूल Publish/Subscribe संदेश प्रणाली को डिज़ाइन और लागू करना सीख लिया है।
हमने मुख्य घटकों (प्रकाशक, सदस्य, विषय, ब्रोकर) को समझा, संदेश प्रारूप निर्धारित किए और सर्वर-साइड ब्रोकर तर्क तथा क्लाइंट-साइड सदस्यता और संदेश-प्राप्ति, दोनों बनाए।
Pub/Sub कई रीयल-टाइम अनुप्रयोगों का आधारभूत पैटर्न है। बड़े पैमाने के लिए सदस्यता रद्द करने की सुविधा, अधिक जटिल विषय प्रबंधन या बाहरी संदेश कतारों के साथ एकीकरण जोड़कर प्रयोग करें।
एआई शिक्षक के साथ WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 12
- पाठ
- 47
अक्सर पूछे जाने वाले प्रश्न
क्या “प्रकाशित/सब्सक्राइब संदेश प्रणाली लागू करना” पाठ निःशुल्क है?
हाँ—“प्रकाशित/सब्सक्राइब संदेश प्रणाली लागू करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“प्रकाशित/सब्सक्राइब संदेश प्रणाली लागू करना” में मैं क्या सीखूँगा?
विषय-आधारित संदेश वितरण के लिए WebSockets पर पब/सब प्रणाली का डिज़ाइन और निर्माण करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“प्रकाशित/सब्सक्राइब संदेश प्रणाली लागू करना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- प्रकाशित/सब्सक्राइब संदेश प्रणाली लागू करना
- WebSockets पर अनुरोध-प्रतिक्रिया
- द्विदिशीय स्ट्रीमिंग और प्रवाह नियंत्रण
- बैकप्रेशर और संदेश बैचिंग