← Back to HTML Course | Chapter 7: Advanced APIs & Features | Lesson 7 of 11

HTML SSE

सोचिए आप किसी ज़रूरी पैकेज के डिलीवर होने का इंतज़ार कर रहे हैं। आप हर पाँच मिनट में दरवाजे पर जाकर चेक कर सकते हैं कि डिलीवरी ट्रक आया या नहीं (इसे polling कहते हैं, और यह बहुत थकाने वाला है)। अब सोचिए आपके फोन पर एक डायरेक्ट notification सिस्टम है। आप सोफे पर आराम कर सकते हैं, और जैसे ही आपका पैकेज डिलीवर होता है, डिलीवरी सर्विस अपने-आप आपकी स्क्रीन पर सीधे notification भेज देती है। HTML Server-Sent Events (SSE) बिल्कुल यही करते हैं। ये आपके सर्वर से आपके ब्राउज़र तक एक डायरेक्ट, one-way कनेक्शन बनाते हैं, जिससे सर्वर बिना ब्राउज़र को रीलोड कराए रियल-टाइम अपडेट्स (जैसे प्रोग्रेस बार या सिस्टम अलर्ट्स) सीधे आपके पेज पर पुश कर सकता है।
Syntax
markup
const source = new EventSource("url");
source.onmessage = (event) => { /* event.data */ };

Server-Sent Events क्या हैं?

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

Note: लाइव नोटिफिकेशन्स, प्रोग्रेस बार्स, या सिस्टम स्टेटस फीड्स आसानी से बनाने के लिए SSE का उपयोग करें।
Warning: SSE सिर्फ सर्वर से ब्राउज़र तक one-way डेटा फीड सपोर्ट करता है; अगर आपको two-way कम्युनिकेशन चाहिए, तो इसके बजाय WebSockets का उपयोग करें।

उदाहरण: What are Server-Sent Events?

markup
<script>
  const source = new EventSource('/updates');
</script>

EventSource से कनेक्ट करना

Server-Sent Events पाना शुरू करने के लिए, आप अपनी स्क्रिप्ट के अंदर एक नया EventSource ऑब्जेक्ट इनिशियलाइज़ करते हैं, जो उस सर्वर फाइल की ओर पॉइंट करता है जो अपडेट्स स्ट्रीम करती है।

Note: अपने कनेक्शन को सुरक्षित रखने के लिए अपने EventSource को सुरक्षित सर्वर फाइल्स की ओर पॉइंट करें।
Warning: सुनिश्चित करें कि आपका सर्वर फाइल पाथ सही हो, क्योंकि टूटे हुए लिंक कनेक्शन बनने से रोक देंगे।

उदाहरण: Connecting with EventSource

markup
<script>
  const source = new EventSource('/stream.php');
</script>

Message Events सुनना

एक बार आपका कनेक्शन एक्टिव हो जाने पर, आप pushed अपडेट्स सुनने के लिए onmessage इवेंट का उपयोग करते हैं, जो सर्वर से भेजा गया डेटा कैप्चर करता है और आपको अपने वेबपेज कंटेंट को रीयल-टाइम में अपडेट करने देता है।

Note: अपनी सर्वर स्ट्रीम से पुश की गई स्ट्रक्चर्ड JSON डेटा स्ट्रिंग्स को आसानी से डिकोड करने के लिए JSON.parse का उपयोग करें।
Warning: सर्वर अपडेट्स मिस न हों, इसके लिए सुनिश्चित करें कि आपका event listener सही तरीके से सेट किया गया हो।

उदाहरण: Listening for Message Events

markup
<script>
  const source = new EventSource('/stream.php');
  source.onmessage = function (event) {
    console.log(event.data);
  };
</script>

Auto-Reconnection व्यवहार

अगर आपका नेटवर्क डिस्कनेक्ट हो जाता है या आपका कनेक्शन बीच में टूट जाता है, तो ब्राउज़र का EventSource ऑब्जेक्ट बैकग्राउंड में अपने-आप सर्वर से दोबारा कनेक्ट करने की कोशिश करता है, जिससे मैनुअल स्क्रिप्ट्स की ज़रूरत के बिना आपका कनेक्शन स्थिर बना रहता है।

Note: कनेक्शन ड्रॉप्स पर नज़र रखने और अपने पेज पर मददगार स्टेटस चेतावनियाँ दिखाने के लिए onerror इवेंट लिसनर का उपयोग करें।
Warning: अगर आपका सर्वर गलत तरीके से कॉन्फ़िगर है, तो ब्राउज़र तेज़, अनंत reconnection लूप्स ट्रिगर कर सकता है।

उदाहरण: Auto-Reconnection Behaviors

markup
<script>
  const source = new EventSource('/stream.php');
  source.onerror = function () {
    console.log('Connection lost, browser will retry automatically');
  };
</script>

सर्वर स्ट्रीम फॉर्मैटिंग

किसी वेबपेज पर इवेंट्स स्ट्रीम करने के लिए, आपकी सर्वर फाइल को एक खास Content-Type हेडर ('text/event-stream') भेजना होगा और अपने डेटा आउटपुट को 'data:' प्रीफिक्स के बाद डबल न्यूलाइन्स वाले सख्त स्ट्रक्चर में फॉर्मैट करना होगा।

Note: अपने सर्वर को साफ 'data: message ' फॉर्मैट में डेटा भेजने के लिए कॉन्फ़िगर करें।
Warning: सही content-type header न भेजने पर ब्राउज़र कनेक्शन को ब्लॉक कर देगा।

उदाहरण: Server Stream Formatting

markup
<!-- Server response headers: Content-Type: text/event-stream -->
<!-- Server response body: data: Hello\n\n -->
<script>
  const source = new EventSource('/stream.php');
</script>
Live Example
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.