C# में Server-Sent Events (SSE): WebSocket के बिना रिएक्टिव वेब

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

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

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

आपकी वेबसाइट अभी भी यूजर से रियल-टाइम में बात क्यों नहीं करती?

\n\n

कल्पना करें: आप एक शेयर बाजार टर्मिनल खोलते हैं, और डॉलर की दर अपने आप अपडेट होती है। या आप एडमिन पैनल में जाते हैं — और देखते हैं कि आपकी आंखों के सामने रजिस्टर्ड यूजर्स की संख्या बढ़ रही है। या एक चैट, जहां संदेश बिना बार-बार पेज रिफ्रेश किए आते हैं।

\n\n

पहले इसके लिए या तो WebSocket लगाना पड़ता था (जटिल, महंगा, हमेशा जरूरी नहीं), या long polling का उपयोग करना पड़ता था (एक पैच जो फोन की बैटरी खत्म कर देता है)। लेकिन एक तीसरा रास्ता भी है — C# में Server-Sent Events।

\n\n

आज हम एक ऐसी तकनीक को समझेंगे जो सर्वर को खुद क्लाइंट से 'संपर्क' करने और डेटा भेजने की अनुमति देती है। बिना अनावश्यक कोड के, बिना टनों JavaScript के, बिना प्रॉक्सी सर्वर के सिरदर्द के। सिर्फ C#, सिर्फ हार्डकोर।

\n\n

Server-Sent Events (SSE) क्या है और यह 'गरीबों का प्रोटोकॉल' क्यों नहीं है

\n\n

Server-Sent Events (या SSE) एक HTML5 मानक है जो सर्वर को सामान्य HTTP कनेक्शन के माध्यम से क्लाइंट को स्ट्रीमिंग डेटा भेजने की अनुमति देता है। क्लाइंट इवेंट्स को सब्सक्राइब करता है, और सर्वर बस Response.Body में लिखता है। बस इतना ही।

\n\n

WebSocket से मुख्य अंतर: SSE एक एकतरफा चैनल है (सर्वर → क्लाइंट)। आपको वापस डेटा भेजने की जरूरत नहीं है? बढ़िया, SSE आपकी पसंद है। इसके साथ:

\n\n
    \n
  • सामान्य HTTP/1.1 और HTTP/2 पर काम करता है
  • \n
  • कनेक्शन टूटने पर ऑटोमैटिकली रीकनेक्ट होता है (ब्राउज़र के EventSource में बिल्ट-इन)
  • \n
  • क्लाइंट पर किसी अतिरिक्त लाइब्रेरी की जरूरत नहीं (स्टैंडर्ड JavaScript के अलावा)
  • \n
  • किसी भी प्रॉक्सी और लोड बैलेंसर से गुजरता है (WebSocket के विपरीत)
  • \n
\n\n

व्यवहार में, SSE C# का उपयोग इसके लिए किया जाता है:

\n
    \n
  • नोटिफिकेशन फीड (सीधे ब्राउज़र में पुश नोटिफिकेशन)
  • \n
  • सर्वर मॉनिटरिंग (लाइव मेट्रिक्स वाले डैशबोर्ड)
  • \n
  • लॉग ट्रांसमिशन (उदाहरण: ब्राउज़र में tail -f)
  • \n
  • AI जनरेशन का स्ट्रीमिंग (ChatGPT जैसे मॉडल से धीरे-धीरे आउटपुट)
  • \n
\n\n

SSE कैसे काम करता है: एक लाइन का प्रोटोकॉल

\n\n

सब कुछ सरल है। सर्वर क्लाइंट को एक विशेष फॉर्मेट में टेक्स्ट का स्ट्रीम भेजता है:

\n\n
data: नमस्ते, दुनिया!\\n\\n\ndata: {"message": "JSON भी काम करता है"}\\n\\n\nevent: customEvent\\n\ndata: नाम वाला इवेंट\\n\\n
\n\n

हर संदेश data: से शुरू होता है, दो न्यूलाइन के साथ खत्म होता है। आप कस्टम इवेंट टाइप के लिए event:, आइडेंटिफायर के लिए id: और रीकनेक्ट टाइमआउट के लिए retry: निर्दिष्ट कर सकते हैं।

\n\n

क्लाइंट JavaScript में इस तरह सब्सक्राइब करता है:

\n\n
const source = new EventSource("/api/stream");\nsource.onmessage = (event) => {\n    console.log("प्राप्त हुआ:", event.data);\n};\nsource.addEventListener("customEvent", (event) => {\n    console.log("कस्टम इवेंट:", event.data);\n});
\n\n

और यह सभी आधुनिक ब्राउज़रों में काम करता है। कोई npm पैकेज नहीं, कोई WebSocket पॉलीफिल नहीं।

\n\n

C# में Server-Sent Events: ASP.NET Core पर कार्यान्वयन

\n\n

चलिए अब कोड लिखते हैं। C# में SSE आयोजित करने का सबसे आसान तरीका ASP.NET Core में एक एंडपॉइंट बनाना है जो रिस्पॉन्स को पूरा नहीं करता, बल्कि उसमें भागों में लिखता है।

\n\n

बेसिक SSE एंडपॉइंट

\n\n
using Microsoft.AspNetCore.Mvc;\n\n[ApiController]\n[Route("api")]\npublic class StreamController : ControllerBase\n{\n    [HttpGet("stream")]\n    public async Task Get(CancellationToken cancellationToken)\n    {\n        Response.Headers.Append("Content-Type", "text/event-stream");\n        Response.Headers.Append("Cache-Control", "no-cache");\n        Response.Headers.Append("Connection", "keep-alive");\n\n        for (int i = 0; i < 10; i++)\n        {\n            if (cancellationToken.IsCancellationRequested)\n                break;\n\n            // SSE फॉर्मेट: data: ... \\n\\n\n            await Response.WriteAsync($"data: संदेश #{i}\\n\\n",                

ब्लॉग

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