PHP में Server-Sent Events: जब सर्वर खुद ब्राउज़र से जुड़ता है
\n\nक्या आपने कभी सोचा है कि Twitter की न्यूज़ फ़ीड, शेयर बाज़ार के रेट या मैसेंजर के नोटिफिकेशन कैसे काम करते हैं? सही पकड़ा — डेटा अपने आप आता है, बिना पेज रिफ्रेश किए और बिना अंतहीन Ajax रिक्वेस्ट के। ज़्यादातर डेवलपर्स सबसे पहले WebSockets के बारे में सोचते हैं, लेकिन एक और बहुत आसान और सुरुचिपूर्ण तरीका है — Server-Sent Events (SSE).
\n\nइस लेख में हम जानेंगे कि PHP में Server-Sent Events को शुरू से कैसे लागू करें। आप सीखेंगे कि बिना किसी जटिल लाइब्रेरी के सर्वर से रीयल-टाइम डेटा कैसे भेजें। न कोई Node.js, न कोई कतारें — सिर्फ शुद्ध PHP और HTML5।
\n\nServer-Sent Events क्या हैं और इनकी ज़रूरत क्यों है?
\n\nSSE (Server-Sent Events) एक HTML5 मानक है जो सर्वर को एक HTTP कनेक्शन पर क्लाइंट को डेटा भेजने की अनुमति देता है। WebSockets के विपरीत, जो दोनों दिशाओं में काम करते हैं, SSE एक एकतरफा चैनल है: डेटा केवल सर्वर से क्लाइंट तक जाता है। लेकिन यही इसका सबसे बड़ा फायदा है: इसका कार्यान्वयन इतना सरल है कि इसके लिए न तो अतिरिक्त लाइब्रेरी और न ही विशेष सर्वर की ज़रूरत होती है।
\n\nServer-Sent Events PHP का उपयोग कहाँ किया जाता है?
\n- \n
- रीयल-टाइम न्यूज़ फ़ीड और नोटिफिकेशन \n
- सर्वर और लॉग की निगरानी \n
- मुद्रा दरें, शेयर के भाव \n
- लंबी प्रक्रियाओं की प्रगति संकेतक (फ़ाइल अपलोड, वीडियो प्रोसेसिंग) \n
- चैटबॉट और अलर्ट सिस्टम \n
पारंपरिक polling (जहाँ क्लाइंट हर N सेकंड में सर्वर से पूछता है) के विपरीत, SSE PHP एक स्थायी कनेक्शन बनाता है जिसमें बार-बार हैंडशेक और हेडर की ज़रूरत नहीं होती। इससे ट्रैफ़िक और CPU संसाधनों की बचत होती है।
\n\nSSE कैसे काम करता है: प्रोटोकॉल और हेडर
\n\nSSE का आधार एक सामान्य HTTP रिस्पॉन्स है जिसमें एक विशेष कंटेंट टाइप होता है। सर्वर टेक्स्ट फ़ॉर्मेट में डेटा भेजता है, जिसमें event, data, id और retry जैसे कीवर्ड का उपयोग होता है। क्लाइंट इस स्ट्रीम को प्राप्त करता है और आने वाले इवेंट को प्रोसेस करता है।
बेसिक प्रोटोकॉल इस तरह दिखता है:
\nContent-Type: text/event-stream\nCache-Control: no-cache\nConnection: keep-alive\n\ndata: नमस्ते दुनिया\n\ndata: {"message": "यह JSON है"}\n\nहर संदेश data: से शुरू होता है, उसके बाद टेक्स्ट आता है। अगर कई लाइनें भेजनी हैं तो बस एक के बाद एक data: लिखें। खाली लाइन \\n\\n संदेश के अंत का संकेत देती है।
PHP में पहला SSE स्क्रिप्ट लिखें
\n\nचलिए एक सरल स्क्रिप्ट बनाते हैं जो हर 2 सेकंड में वर्तमान समय भेजेगी। यह एक क्लासिक उदाहरण है जो तुरंत PHP में रीयल-टाइम का जादू दिखाता है।
\n\nफ़ाइल sse.php:
<?php\n// आउटपुट बफ़रिंग बंद करें\nob_implicit_flush(true);\nob_end_flush();\n\n// SSE हेडर सेट करें\nheader('Content-Type: text/event-stream');\nheader('Cache-Control: no-cache');\nheader('Connection: keep-alive');\nheader('X-Accel-Buffering: no'); // Nginx के लिए\n\nwhile (true) {\n // डेटा तैयार करें\n $data = [\n 'time' => date('H:i:s'),\n 'timestamp' => time()\n ];\n \n // इवेंट भेजें\n echo "data: " . json_encode($data) . "\\n\\n";\n \n // जाँचें कि क्लाइंट ने कनेक्शन बंद तो नहीं किया\n if (connection_aborted()) {\n break;\n }\n \n // 2 सेकंड का विराम\n sleep(2);\n}\n?>\n\nध्यान दें: हम while(true) अनंत लूप का उपयोग कर रहे हैं, लेकिन connection_aborted() की जाँच ज़रूर करें। अगर क्लाइंट ने टैब बंद कर दिया, तो स्क्रिप्ट सर्वर पर लोड डाले बिना समाप्त हो जाएगी।
अब JavaScript में क्लाइंट भाग लिखें:
\n<!DOCTYPE html>\n<html>\n<head>\n <title>SSE Demo PHP</title>\n</head>\n<body>\n <h2>सर्वर से वर्तमान समय:</h2