परिचय: WebSocket रियल-टाइम एप्लिकेशन के लिए मानक क्यों है?
\n\nआधुनिक वेब एप्लिकेशन को उपयोगकर्ता की कार्रवाइयों पर तत्काल प्रतिक्रिया की आवश्यकता होती है। चाहे वह ऑनलाइन चैट हो, स्टॉक टर्मिनल हो, मल्टीप्लेयर गेम हो या मॉनिटरिंग सिस्टम हो — डेटा ट्रांसमिशन में देरी अस्वीकार्य है। पारंपरिक HTTP प्रोटोकॉल, जो "अनुरोध-प्रतिक्रिया" सिद्धांत पर काम करता है, ऐसे परिदृश्यों के लिए अप्रभावी है: क्लाइंट को लगातार सर्वर से पूछताछ (polling) करनी पड़ती है, जिससे अनावश्यक लोड बनता है।
\n\nWebSocket बचाव में आता है — यह एक प्रोटोकॉल है जो क्लाइंट और सर्वर के बीच स्थायी द्विदिश कनेक्शन प्रदान करता है। इस लेख में, हम सीखेंगे कि WebSocket का उपयोग करके C# (.NET) में रियल-टाइम एप्लिकेशन कैसे बनाएं, एक साधारण इको-सर्वर से लेकर पूर्ण चैट तक। आप जानेंगे कि प्रोटोकॉल कैसे काम करता है, .NET प्लेटफ़ॉर्म कौन से उपकरण प्रदान करता है, और सामान्य गलतियों से कैसे बचें।
\n\n.NET में WebSocket की मूल बातें: सर्वर साइड
\n\n.NET प्लेटफ़ॉर्म System.Net.WebSockets नेमस्पेस के माध्यम से WebSocket के लिए अंतर्निहित समर्थन प्रदान करता है। आइए ASP.NET Core पर आधारित सर्वर बनाने पर विचार करें।
1. WebSocket के लिए Middleware सेटअप करना
\n\nसबसे पहले, अनुरोध प्रसंस्करण पाइपलाइन में WebSocket समर्थन जोड़ना आवश्यक है। Program.cs फ़ाइल में:
var builder = WebApplication.CreateBuilder(args);\nvar app = builder.Build();\n\napp.UseWebSockets(); // WebSocket समर्थन सक्षम करें\n\napp.Map("/ws", async (HttpContext context) =>\n{\n if (context.WebSockets.IsWebSocketRequest)\n {\n using var webSocket = await context.WebSockets.AcceptWebSocketAsync();\n await Echo(webSocket);\n }\n else\n {\n context.Response.StatusCode = 400;\n }\n});\n\napp.Run("http://localhost:5000");\n\nasync Task Echo(WebSocket webSocket)\n{\n var buffer = new byte[1024 * 4];\n var receiveResult = await webSocket.ReceiveAsync(\n new ArraySegment<byte>(buffer), CancellationToken.None);\n\n while (!receiveResult.CloseStatus.HasValue)\n {\n // प्राप्त डेटा को क्लाइंट को वापस भेजें (इको)\n await webSocket.SendAsync(\n new ArraySegment<byte>(buffer, 0, receiveResult.Count),\n receiveResult.MessageType,\n receiveResult.EndOfMessage,\n CancellationToken.None);\n\n receiveResult = await webSocket.ReceiveAsync(\n new ArraySegment<byte>(buffer), CancellationToken.None);\n }\n\n await webSocket.CloseAsync(\n receiveResult.CloseStatus.Value,\n receiveResult.CloseStatusDescription,\n CancellationToken.None);\n}\n\n\nयह कोड एक इको-सर्वर बनाता है: क्लाइंट जो कुछ भी भेजता है, वह वापस भेज दिया जाता है। async/await के उपयोग पर ध्यान दें — WebSocket के साथ काम करना हमेशा अतुल्यकालिक होता है।
2. एकाधिक कनेक्शन प्रबंधित करना
\n\nवास्तविक एप्लिकेशन में, कई कनेक्शनों को प्रबंधित करने की आवश्यकता होती है। आइए एक सरल कनेक्शन प्रबंधक बनाएं:
\n\npublic class WebSocketConnectionManager\n{\n private readonly ConcurrentDictionary<string, WebSocket> _connections = new();\n\n public string AddConnection(WebSocket socket)\n {\n var id = Guid.NewGuid().ToString();\n _connections.TryAdd(id, socket);\n return id;\n }\n\n public async Task BroadcastMessageAsync(string message)\n {\n var tasks = _connections.Values.Select(async socket =>\n {\n if (socket.State == WebSocketState.Open)\n {\n var bytes = Encoding.UTF8.GetBytes(message);\n await socket.SendAsync(\n new ArraySegment<byte>(bytes),\n WebSocketMessageType.Text,\n true,\n CancellationToken.None);\n }\n });\n await Task.WhenAll(tasks);\n }\n}\n\n\nयह क्लास सभी सक्रिय कनेक्शनों को संग्रहीत करने और संदेश प्रसारित करने की अनुमति देता है