क्या आप अभी भी मैन्युअल रूप से पेज रिफ्रेश कर रहे हैं? रियल टाइम में आने का समय आ गया है
\n\nकल्पना करें: आपने एक ऑनलाइन एक्सचेंज खोला, और डॉलर की दर बिल्कुल स्थिर हो गई। आप F5 दबाते हैं, दबाते हैं — और यह बदलती नहीं है। परिचित लगता है? अब कल्पना करें कि दर अपने आप अपडेट होती है, जैसे फिल्मों में — सहज और बिना देरी के। यह जादू नहीं है, यह रियल-टाइम तकनीकें हैं। ये ही एक स्थिर वेबसाइट को एक जीवित जीव में बदल देती हैं: चैट, सूचनाएं, रियल-टाइम अपडेट वाले डैशबोर्ड।
\n\nआज हम चार स्तंभों का विश्लेषण करेंगे जिन पर पूरा रियल-टाइम वेब टिका है: लॉन्ग-पोलिंग, वेबसॉकेट्स, सर्वर-सेंट इवेंट्स (SSE) और कॉमेट। मैं दिखाऊंगा कि ये "हुड के नीचे" कैसे काम करते हैं, और PHP पर तैयार कोड दूंगा जिसे आप अभी उपयोग कर सकते हैं। चलिए शुरू करते हैं!
\n\nयह लेख शैक्षिक पोर्टल pythonlib.ru के लिए लिखा गया है — यहाँ हम जटिल अवधारणाओं को समझने योग्य उपकरणों में बदलते हैं।
\n\nसंक्षेप में मुख्य बात: शब्दों के पीछे क्या छिपा है?
\n\nजब आप एक सामान्य पेज खोलते हैं, ब्राउज़र एक अनुरोध करता है, सर्वर जवाब देता है — कनेक्शन बंद हो जाता है। सब कुछ सरल है। लेकिन क्या होगा अगर सर्वर खुद आपके पास नए डेटा के साथ "दस्तक" देना चाहे? यहाँ से शुरू होता है जटिल नृत्य।
\n\n- \n
- लॉन्ग-पोलिंग — पुराना लेकिन विश्वसनीय दादा। क्लाइंट सर्वर पर "लटका" रहता है और तब तक इंतजार करता है जब तक सर्वर जवाब देने का फैसला नहीं करता। \n
- वेबसॉकेट्स — हाल के वर्षों का ट्रेंड। पूर्ण द्विदिश चैनल, जैसे टेलीफोन लाइन। \n
- सर्वर-सेंट इवेंट्स (SSE) — सर्वर से क्लाइंट तक एकतरफा प्रसारण। समाचार फ़ीड और कोटेशन के लिए आदर्श। \n
- कॉमेट — उन तकनीकों का सामान्य नाम जहाँ सर्वर बिना अतिरिक्त अनुरोध के क्लाइंट को डेटा "पुश" करता है। लॉन्ग-पोलिंग और SSE कॉमेट के विशेष मामले हैं। \n
तकनीक #1: लॉन्ग-पोलिंग — रियल-टाइम का दादा
\n\nलॉन्ग-पोलिंग तब होता है जब क्लाइंट सर्वर से कहता है: "मैं जितनी देर चाहे इंतजार करूंगा, बस तब जवाब दो जब डेटा आए।" क्लाइंट एक कनेक्शन खोलता है और उसे तब तक खुला रखता है जब तक सर्वर जवाब नहीं भेजता। जवाब मिलने के बाद, क्लाइंट तुरंत एक नया अनुरोध बनाता है। यह एक अंतहीन श्रृंखला बन जाती है।
\n\nलाभ: किसी भी होस्टिंग पर काम करता है, अतिरिक्त लाइब्रेरी की आवश्यकता नहीं, सभी ब्राउज़रों द्वारा समर्थित।
\nनुकसान: बहुत सारे अनावश्यक हेडर, सर्वर पर लोड, बड़ी संख्या में क्लाइंट होने पर देरी।
\n\nPHP पर उदाहरण (लॉन्ग-पोलिंग)
\n\n<?php\n// long_polling.php\nheader('Content-Type: text/plain; charset=utf-8');\nheader('Cache-Control: no-cache');\n\n$timeout = 30; // अधिकतम 30 सेकंड प्रतीक्षा करें\n$start = time();\n\n// नए डेटा के आगमन का अनुकरण\n$data = getNewDataFromDB(); // आपका डेटा प्राप्त करने का फंक्शन\n\nwhile (empty($data)) {\n if ((time() - $start) > $timeout) {\n echo json_encode(['status' => 'timeout', 'data' => null]);\n flush();\n exit;\n }\n usleep(500000); // 0.5 सेकंड सोएं\n $data = getNewDataFromDB();\n}\n\necho json_encode(['status' => 'ok', 'data' => $data]);\nflush();\n?>\n\nक्लाइंट (JavaScript) पर यह इस तरह दिखेगा:
\n\nfunction longPoll() {\n fetch('/long_polling.php')\n .then(response => response.json())\n .then(data => {\n if (data.status === 'ok') {\n console.log('नया डेटा:', data.data);\n // इंटरफ़ेस अपडेट करें\n }\n longPoll(); // तुरंत नया अनुरोध बनाएं\n })\n .catch(error => {\n console.error('त्रुटि:', error);\n setTimeout(longPoll, 1000); // एक सेकंड बाद पुनः कनेक्ट करें\n });\n}\nlongPoll();\n\nदेखा? क्लाइंट लटका रहता है, इंतजार करता है, डेटा प्राप्त करता है — और फिर से लटक जाता है। यही है PHP पर लॉन्ग-पोलिंग अपने शुद्ध रूप में।
\n\nतकनीक #2: वेबसॉकेट्स — द्विदिश राजमार्ग
\n\nवेबसॉकेट्स