C# में WebSocket: .NET में real-time एप्लिकेशन बनाना
आधुनिक वेब एप्लिकेशनों में अक्सर क्लाइंट और सर्वर के बीच तत्काल डेटा ट्रांसफर की आवश्यकता होती है। पारंपरिक HTTP प्रोटोकॉल, जो "अनुरोध-प्रतिक्रिया" योजना पर काम करता है, उन कार्यों के लिए हमेशा कुशल नहीं होता जहां अपडेट की आवृत्ति और गति महत्वपूर्ण होती है — चैट, ऑनलाइन गेम, स्टॉक कोट्स, मॉनिटरिंग सिस्टम। यहां WebSocket प्रोटोकॉल बचाव में आता है, जो एक स्थायी द्विदिश कनेक्शन स्थापित करता है। इस लेख में, हम विस्तार से देखेंगे कि C# (.NET) में WebSocket को कैसे लागू किया जाए, एक पूर्ण सर्वर और क्लाइंट बनाएंगे, और सर्वोत्तम प्रथाओं पर भी चर्चा करेंगे।
WebSocket क्या है और .NET में इसकी आवश्यकता क्यों है?
WebSocket एक प्रोटोकॉल है जो TCP के ऊपर काम करता है और पूर्ण-द्वैध संचार प्रदान करता है। HTTP हैंडशेक के माध्यम से कनेक्शन स्थापित करने के बाद, डेटा बिना किसी अतिरिक्त ओवरहेड के दोनों दिशाओं में प्रेषित किया जा सकता है। Long Polling या Server-Sent Events के विपरीत, WebSocket न्यूनतम विलंबता और कम ट्रैफ़िक देता है।
.NET इकोसिस्टम में real-time के साथ काम करने के दो मुख्य दृष्टिकोण हैं:
- नेटिव WebSocket (System.Net.WebSockets) — निम्न-स्तरीय API, जो ASP.NET Core में उपलब्ध है। यह कनेक्शन पर पूर्ण नियंत्रण देता है और कस्टम प्रोटोकॉल के लिए उपयुक्त है।
- SignalR — Microsoft की एक उच्च-स्तरीय लाइब्रेरी, जो WebSocket को एब्स्ट्रैक्ट करती है और स्वचालित रूप से ट्रांसपोर्ट (WebSocket, SSE, Long Polling) चुनती है। यह सामान्य कार्यों (चैट, नोटिफिकेशन) के लिए आदर्श है।
चुनाव कार्य पर निर्भर करता है: यदि आपको अधिकतम नियंत्रण और प्रदर्शन चाहिए — नेटिव WebSocket का उपयोग करें; यदि विकास की गति और सरलता चाहिए — SignalR का उपयोग करें।
C# (ASP.NET Core) में WebSocket सर्वर बनाना
आइए सर्वर के चरण-दर-चरण कार्यान्वयन पर विचार करें। शुरू करने के लिए, एक ASP.NET Core प्रोजेक्ट (खाली टेम्पलेट या Web API) बनाएं।
चरण 1: Middleware कॉन्फ़िगर करना
Program.cs फ़ाइल के Configure मेथड में WebSocket समर्थन जोड़ें:
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();
app.UseWebSockets(); // WebSocket समर्थन सक्षम करें
app.Map("/ws", async (HttpContext context) =>{ if (context.WebSockets.IsWebSocketRequest) { using var webSocket = await context.WebSockets.AcceptWebSocketAsync(); await HandleWebSocketConnection(webSocket); } else { context.Response.StatusCode = 400; }});
app.Run();
async Task HandleWebSocketConnection(WebSocket webSocket){ var buffer = new byte[1024 * 4]; while (webSocket.State == WebSocketState.Open) { var result = await webSocket.ReceiveAsync( new ArraySegment<byte>(buffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Close) { await webSocket.CloseAsync( WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None); } else if (result.MessageType == WebSocketMessageType.Text) { var message = Encoding.UTF8.GetString(buffer, 0, result.Count); Console.WriteLine($"प्राप्त: {message}");
// इको प्रतिक्रिया var response = Encoding.UTF8.GetBytes($"इको: {message}"); await webSocket.SendAsync( new ArraySegment<byte>(response), WebSocketMessageType.Text, true, CancellationToken.None); } }}यह कोड एक इको सर्वर बनाता है: यह टेक्स्ट संदेश प्राप्त करता है और उन्हें "इको:" उपसर्ग के साथ वापस भेजता है। कनेक्शन स्थिति प्रबंधन और क्लोजिंग हैंडलिंग पर ध्यान दें।
चरण 2: एकाधिक कनेक्शन प्रबंधित करना
वास्तविक एप्लिकेशन में, सक्रिय कनेक्शनों की सूची संग्रहीत करना आवश्यक है। ConcurrentDictionary या ConcurrentBag का उपयोग करें:
public class WebSoc
```