"लाइव" डेटा अपडेट के पीछे क्या है? रियल-टाइम तकनीकों को समझें
\n\nक्या आपने कभी सोचा है कि चैट कैसे काम करता है जहाँ संदेश तुरंत आते हैं, या शेयर बाजार का लाइव फीड जो अपने आप अपडेट होता है? पारंपरिक HTTP अनुरोध (जहाँ ब्राउज़र सर्वर से पूछता है और सर्वर जवाब देता है) यहाँ काम नहीं करता - बहुत धीमा और अक्षम। यहाँ रियल-टाइम का जादू चाहिए।
\n\nStack Overflow पर "Long-Polling, Websockets, Server-Sent Events (SSE) और Comet क्या हैं?" सवाल के हज़ारों व्यूज़ हैं। इसका मतलब है कि इन शब्दों में उलझन होना आम बात है। आज हम सब कुछ स्पष्ट करेंगे, PHP में असली कोड लिखेंगे और समझेंगे कि कब कौन सी तकनीक इस्तेमाल करनी चाहिए।
\n\nहम कोई जटिल फ्रेमवर्क नहीं लेंगे - सिर्फ शुद्ध PHP और कुछ लोकप्रिय लाइब्रेरीज़। चलिए शुरू करते हैं!
\n\n1. HTTP Polling (सामान्य पोलिंग) - तकनीकों का दादा
\n\nएडवांस तकनीकों पर बात करने से पहले, बुनियादी polling को याद कर लें। क्लाइंट (JavaScript) हर N सेकंड में सर्वर पर एक अनुरोध भेजता है। सर्वर जवाब देता है: "कोई नया डेटा नहीं" या "ये रहा डेटा"।
\n\nPHP कोड (सर्वर साइड):
\n<?php\n// polling_server.php\nheader('Content-Type: application/json');\n\n// डेटा प्राप्त करने का अनुकरण\n$data = ['message' => 'Hello at ' . date('H:i:s')];\necho json_encode($data);\n\n\nक्लाइंट साइड (JavaScript):
\nsetInterval(() => {\n fetch('polling_server.php')\n .then(response => response.json())\n .then(data => console.log(data.message));\n}, 3000); // हर 3 सेकंड\n\nफायदे: सरलता। नुकसान: बहुत सारे अनावश्यक अनुरोध, सर्वर पर लोड, N सेकंड तक की देरी। चैट के लिए यह बिल्कुल उपयुक्त नहीं है।
\n\n2. Long-Polling - एक स्मार्ट विकल्प
\n\nLong-Polling, polling का एक उन्नत संस्करण है। क्लाइंट एक HTTP अनुरोध खोलता है, और सर्वर तुरंत जवाब नहीं देता अगर डेटा नहीं है। वह कनेक्शन को खुला रखता है (इंतज़ार करता है)। जैसे ही डेटा आता है - सर्वर जवाब भेजता है और कनेक्शन बंद कर देता है। क्लाइंट तुरंत एक नया अनुरोध खोलता है।
\n\nक्लाइंट के नज़रिए से - यह एक सामान्य fetch है। सर्वर के नज़रिए से - उसे "सोना" और "जागना" आना चाहिए।
\n\nPHP में Long-Polling का उदाहरण
\n<?php\n// long_polling.php\nheader('Content-Type: application/json');\nheader('Cache-Control: no-cache');\n\n// नए संदेशों की प्रतीक्षा का अनुकरण (जैसे, फ़ाइल या DB से)\n$lastCheck = time();\n$timeout = 30; // अधिकतम 30 सेकंड प्रतीक्षा\n\nwhile (time() - $lastCheck < $timeout) {\n // जाँचें कि क्या नया डेटा आया है\n $newData = checkForNewMessages(); // आपका फंक्शन\n if ($newData !== null) {\n echo json_encode(['status' => 'ok', 'data' => $newData]);\n exit;\n }\n // CPU लोड कम करने के लिए 1 सेकंड सोएं\n sleep(1);\n}\n\n// अगर 30 सेकंड में कोई डेटा नहीं आया - खाली जवाब दें\necho json_encode(['status' => 'timeout', 'data' => null]);\n\n\nमहत्वपूर्ण: असली प्रोजेक्ट में sleep(1) को usleep(500000) (0.5 सेकंड) से बदलें और नॉन-ब्लॉकिंग जाँच का उपयोग करें (जैसे, फ़ाइल के लिए filemtime() या DB में टाइमआउट के साथ SELECT ... FOR UPDATE)।
कहाँ उपयोग होता है: पुराने चैट, WebSockets के बिना वेबसाइटों पर नोटिफिकेशन। नुकसान: फिर भी बहुत सारे कनेक्शन, सर्वर "लटके" अनुरोधों पर संसाधन खर्च करता है।
\n\n3. Server-Sent Events (SSE) - सर्वर से एकतरफा चैनल
\n\nSSE (Server-Sent Events) एक ऐसी तकनीक है जो HTML5 में बनी है। सर्वर किसी भी समय क्लाइंट को डेटा भेज सकता है, लेकिन केवल एक दिशा में (सर्वर → क्लाइंट)। क्लाइंट JavaScript में एक सामान्य EventSource है।
\n\nSSE इसके लिए एकदम सही है: न्यूज़ फीड, शेयर की कीमतें, लॉग्स, नोटिफिकेशन।
\n\nPHP कोड (सर्वर):
\n<?php\n// sse_server.php\nheader('Content-Type: text/event-stream');\nheader('Cache-Control: no-cache'