SSE (Server-Sent Events) को समझना और इसके लाभ

February 1, 2024

Technology

परिचय

SSE (सर्वर-सेंट इवेंट्स) क्लाइंट और सर्वर के बीच HTTP प्रोटोकॉल पर आधारित एक एकतरफा संचार प्रोटोकॉल है। यह सर्वर को क्लाइंट को वास्तविक समय में डेटा पुश करने की अनुमति देता है, जिसके लिए क्लाइंट से स्पष्ट अनुरोध की आवश्यकता नहीं होती है। HTTP प्रोटोकॉल पर बनाया गया, SSE एकतरफा स्थायी कनेक्शन का उपयोग करता है, जिससे सर्वर क्लाइंट को सक्रिय रूप से इवेंट और डेटा भेज सकता है।

सर्वर-सेंट इवेंट्स

मूल रूप से, इसे स्ट्रीमिंग दृष्टिकोण का उपयोग करके लागू किया जाता है, जहां क्लाइंट सर्वर से कनेक्शन अनुरोध शुरू करता है और कनेक्शन को खुला रखता है। सर्वर तब क्लाइंट को सक्रिय रूप से संदेश भेजता है। सर्वर से क्लाइंट को Server-Sent Events (SSE) का उपयोग करके भेजा गया डेटा UTF-8 एन्कोडेड होना चाहिए, और लौटाया गया कंटेंट प्रकार text/event-stream होता है। उदाहरण के लिए, जब आप ChatGPT का उपयोग करते हैं और उससे एक प्रश्न पूछते हैं, तो आप देखेंगे कि यह उत्तर को शब्द-दर-शब्द प्रदर्शित करता है। वास्तव में, ChatGPT पूर्व-गणना किए गए डेटा को आपको 'पुश' करता है, SSE तकनीक का उपयोग करके डेटा लौटाते हुए गणना करता है, इस प्रकार लंबे इंटरफ़ेस प्रतीक्षा समय से बचा जाता है जो सीधे पृष्ठ बंद करने का कारण बन सकता है।

सर्वर-सेंट इवेंट्स का उदाहरण

SSE के लाभ

  1. वास्तविक समय संचार: SSE वास्तविक समय संचार तंत्र प्रदान करता है, जिससे सर्वर क्लाइंट को सक्रिय रूप से डेटा पुश कर सकता है। यह वास्तविक समय क्षमता SSE को तत्काल अपडेट की आवश्यकता वाले अनुप्रयोगों के लिए विशेष रूप से उपयुक्त बनाती है, जैसे वास्तविक समय चैट, ऑनलाइन सहयोग उपकरण, वास्तविक समय डेटा प्रदर्शन, और सूचना वितरण।

  2. नेटवर्क लोड में कमी: पारंपरिक पोलिंग विधियों की तुलना में, SSE लंबे समय तक चलने वाले कनेक्शन का उपयोग करता है। एकल HTTP कनेक्शन के माध्यम से, सर्वर क्लाइंट को कई इवेंट पुश कर सकता है, जिससे बार-बार HTTP अनुरोधों से बचा जाता है और नेटवर्क लोड कम होता है।

  3. हल्कापन: SSE HTTP प्रोटोकॉल पर आधारित है, जो मौजूदा सर्वर सॉफ्टवेयर द्वारा समर्थित है, और WebSocket की तुलना में उपयोग में सरल है।

  4. स्वचालित पुनःकनेक्शन: SSE कनेक्शन बाधित होने के बाद स्वचालित रूप से पुनःकनेक्शन का प्रयास कर सकता है, जिसके लिए अतिरिक्त कोड की आवश्यकता नहीं होती है। यह स्वचालित पुनःकनेक्शन तंत्र सिस्टम की स्थिरता को बढ़ाता है, जिससे अस्थिर नेटवर्क स्थितियों में भी निरंतर संचार सुनिश्चित होता है।

API7 एंटरप्राइज़ का उपयोग करके SSE सेवाओं को प्रॉक्सी करना

व्यावहारिक अनुप्रयोगों में, SSE सेवाओं को प्रॉक्सी करने के लिए एक API गेटवे का उपयोग करने से सेवा स्थिरता बढ़ाने, सुरक्षा और क्रॉस-ओरिजिन मुद्दों को हल करने में मदद मिलती है, और यह जटिल अनुप्रयोग परिदृश्यों को संभालने के लिए उपयुक्त है। NGINX, सबसे लोकप्रिय रिवर्स प्रॉक्सी सर्वरों में से एक के रूप में, एक महत्वपूर्ण बाजार हिस्सेदारी रखता है।

NGINX पर SSE सेवाओं को प्रॉक्सी करते समय, proxy_buffering को अक्षम करना आवश्यक है। हालांकि, इस कॉन्फ़िगरेशन को कम से कम स्थान स्तर पर बंद करना होगा, जिसका अर्थ है कि यदि सिस्टम में कई स्थान हैं और केवल कुछ को SSE सेवाओं का समर्थन करने के लिए कैशिंग अक्षम करने की आवश्यकता है, तो यह अन्य गैर-SSE APIs के प्रदर्शन को प्रभावित कर सकता है। इसके अलावा, NGINX का proxy_buffering कॉन्फ़िगरेशन लचीलेपन की कमी रखता है क्योंकि इसे रनटाइम पर गतिशील रूप से सक्षम या अक्षम नहीं किया जा सकता है, और इसे प्रभावी होने के लिए कॉन्फ़िगरेशन रीलोड की आवश्यकता होती है, जिससे सेवा बाधित हो सकती है।

API7 एंटरप्राइज़ proxy-buffering प्लगइन प्रदान करता है, जो आपको SSE अपस्ट्रीम सेवाओं को अधिक लचीले ढंग से प्रॉक्सी करने की अनुमति देता है। संबंधित रूट्स में इस प्लगइन को सक्षम करके, आप आसानी से कैशिंग को नियंत्रित कर सकते हैं, बिना पूरी कॉन्फ़िगरेशन को रीलोड करने की आवश्यकता के। यह लचीलापन SSE सेवा प्रॉक्सी की आवश्यकताओं को पूरा करता है, साथ ही प्रदर्शन और गतिशील कॉन्फ़िगरेशन आवश्यकताओं को भी पूरा करता है।

API7 एंटरप्राइज का SSE प्लगइन

नीचे दिए गए परीक्षण से SSE सेवाओं को सफलतापूर्वक प्रॉक्सी करने की पुष्टि होती है।

curl "http://127.0.0.1:9080/.sse" -H "Accept: text/event-stream" event: server data: 27d365b177ae id: 1 event: request data: GET /.sse HTTP/1.1 data: data: Host: 127.0.0.1:9080 data: Accept: text/event-stream data: User-Agent: curl/8.1.2 data: X-Forwarded-For: 192.168.65.1 data: X-Forwarded-Host: 127.0.0.1 data: X-Forwarded-Port: 9080 data: X-Forwarded-Proto: http data: X-Real-Ip: 192.168.65.1 data: id: 2 event: time data: 2024-01-29T04:04:20Z id: 3 event: time data: 2024-01-29T04:04:21Z id: 4 ...

निष्कर्ष

संक्षेप में, SSE वास्तविक समय संचार और अपडेट की आवश्यकता वाले परिदृश्यों के लिए उपयुक्त है, जो इसे प्राप्त करने के लिए एक सरल और प्रभावी साधन प्रदान करता है। हालांकि, यह ध्यान रखना महत्वपूर्ण है कि SSE एक एकतरफा चैनल है, जो केवल सर्वर को क्लाइंट को संदेश भेजने की अनुमति देता है। इसलिए, SSE सभी प्रकार के वास्तविक समय संचार आवश्यकताओं के लिए उपयुक्त नहीं हो सकता है। अधिक जटिल द्विदिश संचार परिदृश्यों के लिए, WebSocket या अन्य तकनीकें अधिक उपयुक्त हो सकती हैं।

Tags: