PHP में Server-Sent Events: रीयल-टाइम डेटा भेजने का आसान तरीका

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

PHP में Server-Sent Events: जब सर्वर खुद ब्राउज़र से जुड़ता है

\n\n

क्या आपने कभी सोचा है कि Twitter की न्यूज़ फ़ीड, शेयर बाज़ार के रेट या मैसेंजर के नोटिफिकेशन कैसे काम करते हैं? सही पकड़ा — डेटा अपने आप आता है, बिना पेज रिफ्रेश किए और बिना अंतहीन Ajax रिक्वेस्ट के। ज़्यादातर डेवलपर्स सबसे पहले WebSockets के बारे में सोचते हैं, लेकिन एक और बहुत आसान और सुरुचिपूर्ण तरीका है — Server-Sent Events (SSE).

\n\n

इस लेख में हम जानेंगे कि PHP में Server-Sent Events को शुरू से कैसे लागू करें। आप सीखेंगे कि बिना किसी जटिल लाइब्रेरी के सर्वर से रीयल-टाइम डेटा कैसे भेजें। न कोई Node.js, न कोई कतारें — सिर्फ शुद्ध PHP और HTML5।

\n\n

Server-Sent Events क्या हैं और इनकी ज़रूरत क्यों है?

\n\n

SSE (Server-Sent Events) एक HTML5 मानक है जो सर्वर को एक HTTP कनेक्शन पर क्लाइंट को डेटा भेजने की अनुमति देता है। WebSockets के विपरीत, जो दोनों दिशाओं में काम करते हैं, SSE एक एकतरफा चैनल है: डेटा केवल सर्वर से क्लाइंट तक जाता है। लेकिन यही इसका सबसे बड़ा फायदा है: इसका कार्यान्वयन इतना सरल है कि इसके लिए न तो अतिरिक्त लाइब्रेरी और न ही विशेष सर्वर की ज़रूरत होती है।

\n\n

Server-Sent Events PHP का उपयोग कहाँ किया जाता है?

\n
    \n
  • रीयल-टाइम न्यूज़ फ़ीड और नोटिफिकेशन
  • \n
  • सर्वर और लॉग की निगरानी
  • \n
  • मुद्रा दरें, शेयर के भाव
  • \n
  • लंबी प्रक्रियाओं की प्रगति संकेतक (फ़ाइल अपलोड, वीडियो प्रोसेसिंग)
  • \n
  • चैटबॉट और अलर्ट सिस्टम
  • \n
\n\n

पारंपरिक polling (जहाँ क्लाइंट हर N सेकंड में सर्वर से पूछता है) के विपरीत, SSE PHP एक स्थायी कनेक्शन बनाता है जिसमें बार-बार हैंडशेक और हेडर की ज़रूरत नहीं होती। इससे ट्रैफ़िक और CPU संसाधनों की बचत होती है।

\n\n

SSE कैसे काम करता है: प्रोटोकॉल और हेडर

\n\n

SSE का आधार एक सामान्य HTTP रिस्पॉन्स है जिसमें एक विशेष कंटेंट टाइप होता है। सर्वर टेक्स्ट फ़ॉर्मेट में डेटा भेजता है, जिसमें event, data, id और retry जैसे कीवर्ड का उपयोग होता है। क्लाइंट इस स्ट्रीम को प्राप्त करता है और आने वाले इवेंट को प्रोसेस करता है।

\n\n

बेसिक प्रोटोकॉल इस तरह दिखता है:

\n
Content-Type: text/event-stream\nCache-Control: no-cache\nConnection: keep-alive\n\ndata: नमस्ते दुनिया\n\ndata: {"message": "यह JSON है"}
\n\n

हर संदेश data: से शुरू होता है, उसके बाद टेक्स्ट आता है। अगर कई लाइनें भेजनी हैं तो बस एक के बाद एक data: लिखें। खाली लाइन \\n\\n संदेश के अंत का संकेत देती है।

\n\n

PHP में पहला SSE स्क्रिप्ट लिखें

\n\n

चलिए एक सरल स्क्रिप्ट बनाते हैं जो हर 2 सेकंड में वर्तमान समय भेजेगी। यह एक क्लासिक उदाहरण है जो तुरंत PHP में रीयल-टाइम का जादू दिखाता है।

\n\n

फ़ाइल sse.php:

\n
<?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() की जाँच ज़रूर करें। अगर क्लाइंट ने टैब बंद कर दिया, तो स्क्रिप्ट सर्वर पर लोड डाले बिना समाप्त हो जाएगी।

\n\n

अब JavaScript में क्लाइंट भाग लिखें:

\n
<!DOCTYPE html>\n<html>\n<head>\n    <title>SSE Demo PHP</title>\n</head>\n<body>\n    <h2>सर्वर से वर्तमान समय:</h2                

ब्लॉग

पुस्तक अनुशंसाएँ