Go में Server-Sent Events: WebSocket के बिना रिएक्टिव वेब एप्लिकेशन

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

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

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

Go में Server-Sent Events: जब WebSocket अत्यधिक हो

\n\n

कल्पना करें: आप सर्वर मॉनिटरिंग के लिए एक डैशबोर्ड लिख रहे हैं। डेटा हर 5 सेकंड में अपडेट होता है। क्लाइंट को लोड ड्रॉप के बारे में सूचनाएं प्राप्त करनी चाहिए। आप क्या चुनेंगे? WebSocket? Long Polling? क्या होगा अगर मैं कहूं कि एक ऐसी तकनीक है जो सामान्य HTTP पर काम करती है, क्लाइंट पर अतिरिक्त लाइब्रेरी की आवश्यकता नहीं होती है और एकतरफा डेटा ट्रांसफर के लिए एकदम सही है?

\n\n

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

\n\n

इस लेख में, हम Go में Server-Sent Events को लागू करने का तरीका समझेंगे। आप सीखेंगे कि एक सरल स्ट्रीमिंग कैसे बनाएं, कस्टम इवेंट कैसे भेजें और क्लाइंट डिस्कनेक्शन को कैसे संभालें। चलिए शुरू करते हैं!

\n\n

Go + SSE शक्तिशाली क्यों है?

\n\n

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

\n\n

WebSocket पर SSE का मुख्य लाभ सरलता है। क्लाइंट पर सामान्य EventSource API का उपयोग किया जाता है, जो सभी आधुनिक ब्राउज़रों में काम करता है। कोई अतिरिक्त लाइब्रेरी नहीं, कोई फ्रेमवर्क नहीं। सर्वर साइड सही हेडर के साथ एक सामान्य HTTP हैंडलर है।

\n\n

SSE का उपयोग कब करें?

\n
    \n
  • एकतरफा ट्रांसमिशन — सर्वर डेटा भेजता है, क्लाइंट केवल प्राप्त करता है।
  • \n
  • सूचनाएं और अलर्ट — मॉनिटरिंग सिस्टम, पुश सूचनाएं।
  • \n
  • डेटा स्ट्रीमिंग — लॉग, कोट्स, ट्वीट, समाचार।
  • \n
  • स्वचालित पुनः कनेक्शन — ब्राउज़र डिस्कनेक्ट होने पर स्वयं कनेक्शन बहाल करता है।
  • \n
\n\n

Server-Sent Events प्रोटोकॉल की मूल बातें

\n\n

कोड लिखने से पहले, आइए समझें कि SSE HTTP स्तर पर कैसे काम करता है। जब क्लाइंट कनेक्शन खोलता है, सर्वर विशेष हेडर भेजता है:

\n\n
Content-Type: text/event-stream\nCache-Control: no-cache\nConnection: keep-alive
\n\n

इसके बाद, सर्वर इस प्रारूप में डेटा भेजता है:

\n\n
data: संदेश\\n\\n
\n\n

प्रत्येक संदेश दो न्यूलाइन द्वारा अलग किया जाता है। आप कई फ़ील्ड भेज सकते हैं:

\n\n
event: userlogin\ndata: {"username": "alice"}\\n\\n
\n\n

event फ़ील्ड इवेंट के प्रकार को परिभाषित करता है, और data इसकी सामग्री (आमतौर पर JSON) है। id (अंतिम इवेंट का पहचानकर्ता) और retry (मिलीसेकंड में पुनः कनेक्शन का समय) फ़ील्ड भी हैं।

\n\n

Go पर SSE सर्वर लिखना

\n\n

चलिए सबसे सरल से शुरू करते हैं — एक सर्वर जो हर सेकंड वर्तमान समय भेजता है। main.go फ़ाइल बनाएं:

\n\n
package main\n\nimport (\n    "fmt"\n    "net/http"\n    "time"\n)\n\nfunc main() {\n    http.HandleFunc("/events", sseHandler)\n    http.ListenAndServe(":8080", nil)\n}\n\nfunc sseHandler(w http.ResponseWriter, r *http.Request) {\n    // SSE के लिए हेडर सेट करें\n    w.Header().Set("Content-Type", "text/event-stream")\n    w.Header().Set("Cache-Control", "no-cache")\n    w.Header().Set("Connection", "keep-alive")\n\n    // तत्काल डेटा भेजने के लिए flusher बनाएं\n    flusher, ok := w.(http.Flusher)\n    if !ok {\n        http.Error(w, "Streaming unsupported", http.StatusInternalServerError)\n        return\n    }\n\n    // इवेंट भेजने का अनंत लूप\n    for {\n        select {\n        case <-r.Con                

ब्लॉग

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