क्यों WebSockets एक जादू है जिसे आपको ज़रूर आज़माना चाहिए
\n\nकल्पना करें: आपने क्रिप्टोकरेंसी की कीमतों वाली एक वेबसाइट खोली है। कीमतें हर सेकंड बदल रही हैं। या फिर एक ऑनलाइन चैट, जहाँ संदेश तुरंत आते हैं, बिना "पेज रिफ्रेश करें" के। यह कैसे काम करता है? पहले ब्राउज़र लगातार सर्वर से पूछता था: "अरे, कुछ नया है?" — और सर्वर जवाब देता था: "नहीं, सो जाओ।" इसे HTTP polling कहते हैं। यह धीमा है, ट्रैफिक खाता है और सर्वर पर लोड डालता है।
\n\nWebSockets एक खुले संचार चैनल की तरह है। सर्वर स्वयं क्लाइंट से कह सकता है: "देखो, अपडेट!" — बिना किसी अतिरिक्त अनुरोध के। C# में WebSockets के साथ काम करना न केवल सुविधाजनक है, बल्कि सुरुचिपूर्ण भी है। .NET इकोसिस्टम तैयार टूल प्रदान करता है: मूल System.Net.WebSockets क्लासेस से लेकर शक्तिशाली SignalR तक।
इस लेख में हम केवल सिद्धांत के बारे में बात नहीं करेंगे। हम दो वास्तविक प्रोजेक्ट लिखेंगे: रियल-टाइम चैट और स्टॉक मॉनिटर। आप देखेंगे कि WebSocket सर्वर C# कैसे बनाया जाता है और उससे एक क्लाइंट कैसे जोड़ा जाता है। चलिए शुरू करते हैं!
\n\nWebSockets क्या है और C# एक आदर्श विकल्प क्यों है
\n\nWebSocket TCP के ऊपर द्वि-दिशात्मक संचार का एक प्रोटोकॉल है। हैंडशेक के बाद कनेक्शन खुला रहता है। डेटा HTTP हेडर के बिना दोनों दिशाओं में उड़ता है। यह प्रदान करता है:
\n\n- \n
- गति — मिलीसेकंड में विलंबता। \n
- संसाधनों की बचत — सैकड़ों अनुरोधों के बजाय एक कनेक्शन। \n
- वास्तविक रियल-टाइम — सर्वर स्वयं भेजने की शुरुआत करता है। \n
इस संदर्भ में C# एक वास्तविक भारी तोपखाना है। ASP.NET Core बॉक्स से बाहर WebSockets का समर्थन करता है। साथ ही एसिंक्रोनस प्रोग्रामिंग (async/await) चैनलों के साथ काम करने के मॉडल पर पूरी तरह फिट बैठता है। आप संदेश की प्रतीक्षा करते समय थ्रेड को ब्लॉक नहीं करते — यह कोड को कुशल और पठनीय बनाता है।
\n\nपहला प्रोजेक्ट: WebSockets पर रियल-टाइम चैट
\n\nहम क्लासिक — चैट से शुरू करते हैं। यह पूरी यांत्रिकी को स्पष्ट रूप से दिखाता है: कनेक्शन, भेजना, प्राप्त करना और कनेक्शन बंद करना।
\n\nचरण 1: C# में WebSocket सर्वर बनाएं
\n\nVisual Studio या टर्मिनल खोलें। एक नया ASP.NET Core Web API (या खाली) प्रोजेक्ट बनाएं। यदि आवश्यक हो तो पैकेज इंस्टॉल करें:
\n\ndotnet add package Microsoft.AspNetCore.WebSockets\n\nअब Program.cs में middleware कॉन्फ़िगर करें। यहाँ सर्वर का न्यूनतम कोड है:
var builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddWebSockets(options => { });\nvar app = builder.Build();\n\napp.UseWebSockets();\n\n// सभी कनेक्टेड क्लाइंट्स को स्टोर करने के लिए सूची\nvar clients = new List<System.Net.WebSockets.WebSocket>();\n\napp.Map("/chat", async (HttpContext context) =>\n{\n if (context.WebSockets.IsWebSocketRequest)\n {\n var webSocket = await context.WebSockets.AcceptWebSocketAsync();\n clients.Add(webSocket);\n Console.WriteLine("नया क्लाइंट कनेक्ट हुआ!");\n\n // डेटा प्राप्त करने के लिए बफर\n var buffer = new byte[1024 * 4];\n while (webSocket.State == WebSocketState.Open)\n {\n var result = await webSocket.ReceiveAsync(\n new ArraySegment<byte>(buffer), CancellationToken.None);\n \n if (result.MessageType == WebSocketMessageType.Close)\n {\n await webSocket.CloseAsync(\n WebSocketCloseStatus.NormalClosure, \n "कनेक्शन बंद हुआ", CancellationToken.None);\n clients.Remove(webSocket);\n Console.WriteLine("क्लाइंट डिस्कनेक्ट हुआ।");\n }\n else if (result.MessageType == WebSocketMessageType.Text)\n {\n // एक क्लाइंट से संदेश प्राप्त करें\n var message = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);\n Console.WriteLine($"प्राप्त हुआ: {message}");\n\n // सभी अन्य क्लाइंट्स को भेजें\n v