Java में Server-Sent Events: जब WebSocket अत्यधिक हो और HTTP अपर्याप्त
\n\nक्या आपने कभी सोचा है कि Twitter में समाचार फ़ीड, Telegram में सूचनाएं या खेल मैचों के लाइव परिणाम कैसे काम करते हैं? ऐसा लगता है कि डेटा अपने आप आता है, बिना पेज को रिफ्रेश किए। रहस्य सरल है: Server-Sent Events (SSE) — एक तकनीक जो सर्वर को सामान्य HTTP कनेक्शन के माध्यम से रीयल टाइम में क्लाइंट को डेटा भेजने की अनुमति देती है।
\n\nइस लेख में हम Java में Server-Sent Events को समझेंगे। आप जानेंगे कि SSE अक्सर WebSocket से अधिक सुविधाजनक क्यों है, Java Servlet API पर सर्वर कैसे सेट करें, और क्लाइंट पर इवेंट कैसे प्राप्त करें। कोड काम करने योग्य होगा, शैली जीवंत होगी, और उदाहरण वास्तविक कार्यों के जितना संभव हो उतना करीब होंगे।
\n\nServer-Sent Events क्या हैं और इनकी आवश्यकता क्यों है?
\n\nServer-Sent Events (SSE) एक W3C मानक है जो सर्वर को एक लंबे समय तक चलने वाले HTTP कनेक्शन के माध्यम से क्लाइंट को डेटा "पुश" करने की अनुमति देता है। क्लाइंट इवेंट स्ट्रीम की सदस्यता लेता है, और सर्वर उनके आने पर संदेश भेजता है।
\n\nSSE इसके लिए आदर्श है:
\n- \n
- सूचनाएं — नए ईमेल, संदेश, स्थिति परिवर्तन। \n
- समाचार फ़ीड — पोस्ट, ट्वीट, मुद्रा दरें। \n
- निगरानी — लॉग, सर्वर मेट्रिक्स, कार्य प्रगति। \n
- लाइव डेटा — स्टॉक कोट्स, मैच परिणाम, मौसम। \n
WebSocket के विपरीत, SSE केवल एक दिशा में काम करता है (सर्वर → क्लाइंट), लेकिन यह अधिकांश परिदृश्यों के लिए पर्याप्त है। साथ ही, SSE सामान्य HTTP का उपयोग करता है, अतिरिक्त पोर्ट की आवश्यकता नहीं होती है, और आसानी से प्रॉक्सी और फायरवॉल से गुजरता है।
\n\nServer-Sent Events बनाम WebSocket: क्या चुनें?
\n\nयदि आपको केवल सर्वर से क्लाइंट को डेटा भेजना है (बिना प्रतिक्रिया के), तो SSE चुनें। यह सरल, हल्का और सस्ता है। WebSocket तब उचित है जब क्लाइंट भी सक्रिय रूप से डेटा भेजता है (जैसे चैट या ऑनलाइन गेम में)।
\n\n| मानदंड | \nServer-Sent Events | \nWebSocket | \n
|---|---|---|
| दिशा | \nसर्वर → क्लाइंट | \nद्विदिशात्मक | \n
| प्रोटोकॉल | \nHTTP/1.1, HTTP/2 | \nws:// या wss:// | \n
| स्वचालित पुन: कनेक्शन | \nहाँ (ब्राउज़र में निर्मित) | \nनहीं (लागू करना होगा) | \n
| कार्यान्वयन जटिलता | \nकम | \nमध्यम/उच्च | \n
| ब्राउज़र समर्थन | \nसभी आधुनिक | \nसभी आधुनिक | \n
शैक्षिक साइट PythonLib के लिए, हमने Java को चुना क्योंकि यह सर्वर-साइड डेवलपमेंट के लिए एक विश्वसनीय भाषा है। चलिए शुरू करते हैं!
\n\nसर्वर पक्ष: Servlet API के साथ Java पर SSE का कार्यान्वयन
\n\nसर्वर से शुरू करते हैं। सबसे आसान तरीका मानक Java Servlets का उपयोग करना है। हमें चाहिए:
\n- \n
- हेडर सेट करें
Content-Type: text/event-stream। \n - कैशिंग बंद करें (
Cache-Control: no-cache)। \n - कनेक्शन को खुला रखें। \n
- डेटा को
data: ...\\n\\nप्रारूप में भेजें। \n
उदाहरण 1: Java Servlet पर सरल SSE सर्वर
\n\nएक सर्वलेट बनाएं जो हर 5 सेकंड में वर्तमान समय भेजता है।
\n\nimport javax.servlet.ServletException;\nimport javax.servlet.annotation.WebServlet;\nimport javax.servlet.http.HttpServlet;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\nimport java.io.PrintWriter;\nimport java.time.LocalTime;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.ScheduledExecutorServ