C++ पर WebSocket: रियल-टाइम एप्लिकेशन A से Z तक
\n\nआधुनिक वेब प्रौद्योगिकी की दुनिया में, उपयोगकर्ता एप्लिकेशन से तत्काल प्रतिक्रिया की उम्मीद करते हैं। पारंपरिक HTTP प्रोटोकॉल, जो "अनुरोध-प्रतिक्रिया" मॉडल पर काम करता है, उन कार्यों के लिए उपयुक्त नहीं है जिनमें डेटा के निरंतर अपडेट की आवश्यकता होती है: ऑनलाइन चैट, शेयर बाजार के कोटेशन, मल्टीप्लेयर गेम और मॉनिटरिंग सिस्टम। यहीं पर WebSocket मदद करता है — एक प्रोटोकॉल जो क्लाइंट और सर्वर के बीच स्थायी द्विदिश कनेक्शन प्रदान करता है।
\n\nइस लेख में, हम देखेंगे कि C++ पर WebSocket का उपयोग करके रियल-टाइम एप्लिकेशन कैसे बनाएं। आप लाइब्रेरी, आर्किटेक्चर के बारे में जानेंगे और अपना पहला कार्यशील कोड लिखेंगे।
\n\nWebSocket क्या है और C++ में इसकी आवश्यकता क्यों है?
\n\nWebSocket एक प्रोटोकॉल है जो क्लाइंट और सर्वर के बीच एक स्थायी TCP कनेक्शन स्थापित करता है। हैंडशेक के बाद, डेटा दोनों दिशाओं में बिना बार-बार HTTP अनुरोधों की आवश्यकता के प्रेषित किया जा सकता है। यह विलंबता और नेटवर्क लोड को काफी कम करता है।
\n\nC++ उच्च-प्रदर्शन रियल-टाइम सिस्टम के लिए एक आदर्श भाषा है। यह मेमोरी, थ्रेड और नेटवर्क संचालन पर पूर्ण नियंत्रण देता है। WebSocket के साथ मिलकर, आपको मिलता है:
\n\n- \n
- न्यूनतम विलंबता — डेटा मिलीसेकंड में वितरित होता है। \n
- उच्च थ्रूपुट — हजारों समवर्ती कनेक्शन। \n
- ऊर्जा दक्षता — सर्वर संसाधनों की कम खपत। \n
उपयोग के उदाहरण: शेयर बाजार टर्मिनल, ऑनलाइन गेम (जैसे, रियल-टाइम शतरंज), सूचना प्रणाली, IoT उपकरण और यहां तक कि सेंसर से डेटा स्ट्रीमिंग।
\n\nलाइब्रेरी का चयन: Boost.Beast बनाम uWebSockets
\n\nC++ में WebSocket के साथ काम करने के लिए कई लोकप्रिय लाइब्रेरी हैं। हम दो मुख्य पर विचार करेंगे:
\n\nBoost.Beast
\nयह Boost इकोसिस्टम का हिस्सा है, जो आधुनिक C++11/14/17 में लिखा गया है। Beast WebSocket और HTTP पर निम्न-स्तरीय नियंत्रण प्रदान करता है। यह एसिंक्रोनस है, Boost.Asio पर आधारित है और गंभीर परियोजनाओं के लिए आदर्श है।
uWebSockets (µWebSockets)
\nएक हल्की और अत्यंत तेज़ लाइब्रेरी। C++17 में लिखी गई, अधिकतम प्रदर्शन पर केंद्रित। माइक्रोसर्विस और सरल रियल-टाइम एप्लिकेशन के लिए आदर्श।
\n\nइस गाइड के लिए हम Boost.Beast चुनेंगे, क्योंकि यह अधिक लचीला है और शैक्षिक उद्देश्यों के लिए बेहतर दस्तावेजीकृत है।
\n\nBoost.Beast के साथ C++ पर WebSocket सर्वर लिखना
\n\nआइए एक सरल इको सर्वर बनाएं जो क्लाइंट से संदेश प्राप्त करता है और उन्हें वापस भेजता है। यह किसी भी रियल-टाइम एप्लिकेशन का आधार है।
\n\nशुरू करने के लिए, Boost.Beast और Asio स्थापित करें। अधिकांश Linux वितरणों में, यह पैकेज मैनेजर के माध्यम से किया जाता है:
\n\nsudo apt install libboost-all-dev\n\nअब सर्वर कोड:
\n\n#include <boost/beast/core.hpp>\n#include <boost/beast/websocket.hpp>\n#include <boost/asio/ip/tcp.hpp>\n#include <iostream>\n#include <string>\n#include <thread>\n\nnamespace beast = boost::beast;\nnamespace websocket = beast::websocket;\nnamespace net = boost::asio;\nusing tcp = net::ip::tcp;\n\nvoid do_session(tcp::socket&& socket) {\n try {\n websocket::stream<tcp::socket> ws{std::move(socket)};\n ws.accept();\n\n for (;;) {\n beast::flat_buffer buffer;\n ws.read(buffer);\n auto msg = beast::buffers_to_string(buffer.data());\n std::cout << "Received: " << msg << std::endl;\n\n // इको प्रतिक्रिया\n ws.text(ws.got_text());\n ws.write(buffer.data());\n }\n } catch (beast::system_error const& se) {\n if (se.code() != websocket::error::closed) {\n std::cerr << "Error: " << se.code().message() << std::endl;\n }\n }\n}\n\nint main() {\n try {\n