WebSocket on C++: उन्नत स्तर के real-time अनुप्रयोग

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

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

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

परिचय: real-time सिस्टम के लिए C++ पर WebSocket क्यों पेशेवरों की पसंद है

\n

आधुनिक real-time संचार की दुनिया में - शेयर बाजार टर्मिनलों से लेकर मल्टीप्लेयर गेम तक - मिलीसेकंड की देरी सब कुछ तय करती है। C++ पर WebSocket उस प्रदर्शन को प्राप्त करने की अनुमति देता है जो व्याख्यात्मक भाषाओं के लिए उपलब्ध नहीं है। इस लेख में, हम Boost.Beast लाइब्रेरी का उपयोग करके C++ में real-time अनुप्रयोग बनाने की उन्नत तकनीकों पर चर्चा करेंगे, जो प्रोटोकॉल पर निम्न-स्तरीय नियंत्रण और न्यूनतम ओवरहेड प्रदान करती है।

\n

हम मूल बातों पर विचार नहीं करेंगे - यह माना जाता है कि आप C++ में नेटवर्क प्रोग्रामिंग और WebSocket की मूल बातों से परिचित हैं। इसके बजाय, हम आर्किटेक्चर, स्केलिंग, त्रुटि प्रबंधन और प्रदर्शन अनुकूलन पर ध्यान केंद्रित करेंगे।

\n\n

Boost.Beast के साथ C++ पर एसिंक्रोनस WebSocket सर्वर का आर्किटेक्चर

\n

C++ का मुख्य लाभ थ्रेड्स पर ओवरहेड के बिना पूरी तरह से एसिंक्रोनस सिस्टम बनाने की क्षमता है। Boost.Beast, Boost.Asio के ऊपर बनाया गया है, जो नेटवर्क सॉकेट के साथ काम करने के लिए एक शक्तिशाली टूलकिट प्रदान करता है।

\n\n

सर्वर की मूल संरचना

\n

सर्वर को हजारों समवर्ती कनेक्शनों को संभालने में सक्षम होना चाहिए। इसके लिए event loop (io_context) और एसिंक्रोनस ऑपरेशन का उपयोग किया जाता है। आइए एक न्यूनतम लेकिन उन्नत कार्यान्वयन पर विचार करें:

\n\n
#include <boost/beast/core.hpp>\n#include <boost/beast/websocket.hpp>\n#include <boost/asio.hpp>\n#include <memory>\n#include <string>\n#include <unordered_set>\n\nnamespace beast = boost::beast;\nnamespace websocket = beast::websocket;\nnamespace net = boost::asio;\nusing tcp = net::ip::tcp;\n\nclass WebSocketSession : public std::enable_shared_from_this<WebSocketSession> {\n    websocket::stream<beast::tcp_stream> ws_;\n    beast::flat_buffer buffer_;\n\npublic:\n    explicit WebSocketSession(tcp::socket&& socket)\n        : ws_(std::move(socket)) {}\n\n    void run() {\n        // एसिंक्रोनस हैंडशेक\n        ws_.async_accept(\n            beast::bind_front_handler(\n                &WebSocketSession::on_accept,\n                shared_from_this()));\n    }\n\nprivate:\n    void on_accept(beast::error_code ec) {\n        if (ec) return;\n        do_read();\n    }\n\n    void do_read() {\n        ws_.async_read(buffer_,\n            beast::bind_front_handler(\n                &WebSocketSession::on_read,\n                shared_from_this()));\n    }\n\n    void on_read(beast::error_code ec, std::size_t bytes_transferred) {\n        if (ec == websocket::error::closed) return;\n        if (ec) return;\n\n        // संदेश प्रसंस्करण\n        std::string msg = beast::buffers_to_string(buffer_.data());\n        buffer_.consume(buffer_.size());\n\n        // इको-उत्तर (वास्तविक अनुप्रयोग में - व्यावसायिक तर्क)\n        ws_.text(ws_.got_text());\n        ws_.async_write(net::buffer(msg),\n            beast::bind_front_handler(\n                &WebSocketSession::on_write,\n                shared_from_this()));\n    }\n\n    void on_write(beast::error_code ec, std::size_t bytes_transferred) {\n        if (ec) return;\n        do_read();\n    }\n};
\n\n

सत्र प्रबंधन और प्रसारण

\n

real-time चैट या मॉनिटरिंग के लिए सभी कनेक्टेड क्लाइंट को संदेश भेजने की आवश्यकता होती है। thread-safe कंटेनर का उपयोग करें:

\n\n
class WebSocketServer {\n    net::io_context& ioc_;\n    tcp::acceptor acceptor_;\n    std::unordered_set<std::shared_ptr<WebSocketSession>> sessions_;\n    std::mutex sessions_mutex_;\n\npublic:\n    WebSocketServer(net::io_context& ioc, short port)\n        : ioc_(ioc)\n        , acceptor_(ioc, tcp::endpoint(tcp::v4(), port)) {\n        do_accept();\n    }\n\n    void broadcast(const std::string& message) {\n        std::lock_guard<std::mutex> lock(sessions_mutex_);\n        for (auto& session : sessions_) {\n            session->send(message);\n        }\n                

ब्लॉग

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