WebSockets पर अनुरोध-प्रतिक्रिया
WebSocket संदेश ID और पावती का उपयोग करके पारंपरिक अनुरोध-प्रतिक्रिया अर्थविधि का अनुकरण करने की तकनीकें सीखें।
WebSockets पर अनुरोध-प्रतिक्रिया, CoddyKit पर WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
Fire-and-Forget से आगे
WebSockets वास्तविक समय में डेटा की निरंतर धाराओं के लिए शानदार हैं। चैट संदेशों, लाइव अपडेट या गेम की स्थितियों के बारे में सोचिए!
लेकिन अगर आपको पारंपरिक अनुरोध-प्रतिक्रिया वाला संचार करना हो, जैसे Server से कोई विशेष डेटा प्राप्त करना और उसके अनुरूप एकल उत्तर की अपेक्षा करना, तब क्या होगा?
अतुल्यकालिक प्रकृति
HTTP के विपरीत, जहाँ प्रत्येक अनुरोध का तुरंत और सीधा उत्तर मिलता है, WebSockets अतुल्यकालिक, संदेश-आधारित मॉडल पर काम करते हैं।
जब आप WebSocket के माध्यम से कोई संदेश भेजते हैं, तो आपको अपने विशिष्ट उत्तर के रूप में आने वाले संदेश का स्वतः पता नहीं चलता। यह ऐसा है जैसे आप एक पत्र भेजें और डाक के ढेर में उसके विशेष उत्तर-पत्र की प्रतीक्षा करें!
विशिष्ट अनुरोध पहचानकर्ता
इसे हल करने के लिए हम एक महत्वपूर्ण अवधारणा प्रस्तुत करते हैं: संदेश ID। जब भी कोई client अनुरोध भेजता है, वह उसके साथ एक विशिष्ट पहचानकर्ता जोड़ता है।
फिर Server अनुरोध को संसाधित करता है और अपने उत्तर में वही पहचानकर्ता शामिल करता है। इससे client उत्तर को उसके मूल अनुरोध से मिला सकता है।
क्लाइंट पर अनुरोधों का ट्रैक रखना
client पर हमें लंबित अनुरोधों का ट्रैक रखने और उनके उत्तर आने पर क्या करना है, यह निर्धारित करने का तरीका चाहिए। एक सामान्य तरीका यह है कि प्रत्येक लंबित अनुरोध के लिए Promise को संग्रहीत करने हेतु Map या ऑब्जेक्ट का उपयोग किया जाए।
अपने ब्राउज़र के कंसोल में यह बुनियादी सेटअप चलाकर देखिए:
const ws = new WebSocket("ws://localhost:8080");
const pendingRequests = new Map();
ws.onopen = () => console.log("WebSocket Connected!");
ws.onclose = () => console.log("WebSocket Disconnected.");
ws.onerror = (error) => console.error("WebSocket Error:", error);
// This will be updated later to handle responsesServer ID के साथ उत्तर देता है
Server की भूमिका सरल है: जब उसे id वाला संदेश मिले, तो उसे उसे संसाधित करके ऐसा उत्तर भेजना चाहिए जिसमें वही id शामिल हो।
यहाँ Node.js Server का सरलीकृत कोड अंश दिया गया है:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', ws => {
ws.on('message', message => {
const request = JSON.parse(message);
console.log('Received:', request);
// Assume processing takes time...
setTimeout(() => {
const response = {
id: request.id, // Echo the original ID!
type: 'response',
payload: `Hello from server, for request ${request.id}`
};
ws.send(JSON.stringify(response));
}, 1000);
});
});
console.log('Server started on ws://localhost:8080');पूरा चक्र क्रियान्वित होते हुए
आइए, अनुरोध-प्रतिक्रिया चक्र का क्रम समझते हैं:
- client विशिष्ट
idबनाता है (जैसे, 1)। - client
id: 1के लिएPromiseकोpendingRequestsमें संग्रहीत करता है। - client
{id: 1, type: 'fetchUser', userId: 123}भेजता है। - Server उसे प्राप्त करके संसाधित करता है और उत्तर तैयार करता है।
- Server
{id: 1, type: 'userFetched', data: {...}}भेजता है। - client संदेश प्राप्त करता है,
pendingRequestsमेंid: 1खोजता है और उसकाPromiseपूरा करता है।
एक `sendRequest` फ़ंक्शन
अनुरोध भेजना आसान बनाने के लिए हम इस तर्क को एक सहायक फ़ंक्शन में समेट सकते हैं। यह फ़ंक्शन एक ID बनाएगा, एक promise संग्रहीत करेगा, संदेश भेजेगा और promise लौटाएगा।
इसे अपने client-साइड कोड में जोड़िए:
let nextRequestId = 0;
function sendRequest(type, payload) {
const requestId = nextRequestId++;
const message = { id: requestId, type, payload };
return new Promise((resolve, reject) => {
pendingRequests.set(requestId, { resolve, reject, timeoutId: null });
ws.send(JSON.stringify(message));
console.log("Sent request:", message);
// We'll add timeout logic soon!
});
}
// Example usage (after ws is open):
// sendRequest('getUser', { id: 1 }).then(data => console.log(data));Server के उत्तरों को संसाधित करना
अब आइए, आने वाले Server उत्तरों को सही ढंग से संसाधित करने और संबंधित promises को पूरा (या अस्वीकार) करने के लिए अपने client के ws.onmessage हैंडलर को अपडेट करें।
यहीं pendingRequests मैप वास्तव में उपयोगी साबित होता है!
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
console.log("Received:", message);
const { id, error, payload } = message;
if (pendingRequests.has(id)) {
const { resolve, reject, timeoutId } = pendingRequests.get(id);
clearTimeout(timeoutId); // Important: clear the timeout!
pendingRequests.delete(id); // Remove from tracking
if (error) {
reject(new Error(error));
} else {
resolve(payload); // Resolve with the response payload
}
} else {
console.warn("Unmatched message ID or broadcast received:", message);
// Handle messages that are not direct responses to a request (e.g., broadcasts)
}
};समय-सीमा और त्रुटि प्रबंधन
अगर Server कभी उत्तर न दे तो? या कनेक्शन टूट जाए तो?
लंबित अनुरोधों के लिए समय-सीमाएँ लागू करना अत्यंत महत्वपूर्ण है। यदि निर्धारित अवधि के भीतर उत्तर प्राप्त न हो, तो client को समय-सीमा संबंधी त्रुटि के साथ promise को अपने-आप अस्वीकार कर देना चाहिए।
इससे अनुरोध अनिश्चित समय तक अटके रहने और मेमोरी का उपयोग करते रहने से बचते हैं।
अपनी समझ जाँचिए
WebSockets पर एक मजबूत अनुरोध-प्रतिक्रिया पैटर्न लागू करने के लिए निम्नलिखित में से कौन-से आवश्यक घटक हैं?
पुनरावलोकन: अनुरोध-प्रतिक्रिया
आपने WebSockets का उपयोग करके पारंपरिक अनुरोध-प्रतिक्रिया मॉडल का अनुकरण करना सीख लिया है!
- विशिष्ट संदेश ID: प्रत्येक अनुरोध के साथ एक ID जोड़ें।
- क्लाइंट-साइड ट्रैकिंग: लंबित अनुरोधों के
Promiseसंग्रहीत करने के लिएMapका उपयोग करें। - Server द्वारा ID लौटाना: Server अपने उत्तर में अनुरोध ID शामिल करता है।
- समय-सीमाएँ: उत्तर न मिलने की स्थिति को सहज ढंग से संभालने के लिए समय-सीमाएँ लागू करें।
यह पैटर्न WebSockets को डेटा की धाराओं और अलग-अलग डेटा के आदान-प्रदान, दोनों के लिए बेहद बहुमुखी बनाता है!
एआई शिक्षक के साथ WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 12
- पाठ
- 47
अक्सर पूछे जाने वाले प्रश्न
क्या “WebSockets पर अनुरोध-प्रतिक्रिया” पाठ निःशुल्क है?
हाँ—“WebSockets पर अनुरोध-प्रतिक्रिया” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“WebSockets पर अनुरोध-प्रतिक्रिया” में मैं क्या सीखूँगा?
WebSocket संदेश ID और पावती का उपयोग करके पारंपरिक अनुरोध-प्रतिक्रिया अर्थविधि का अनुकरण करने की तकनीकें सीखें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“WebSockets पर अनुरोध-प्रतिक्रिया” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर WebSockets और रीयल-टाइम सिस्टम प्रोग्रामिंग पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- प्रकाशित/सब्सक्राइब संदेश प्रणाली लागू करना
- WebSockets पर अनुरोध-प्रतिक्रिया
- द्विदिशीय स्ट्रीमिंग और प्रवाह नियंत्रण
- बैकप्रेशर और संदेश बैचिंग