WebSocket लाइब्रेरी C++: अवलोकन और उपयोग के उदाहरण

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

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

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

C++ के लिए WebSocket लाइब्रेरी: पूर्ण गाइड



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



1. Boost.Beast (अनुशंसित)



Boost.Beast Boost.Asio पर आधारित एक लाइब्रेरी है, जो HTTP और WebSocket प्रोटोकॉल प्रदान करती है। यह आधिकारिक Boost वितरण का हिस्सा है (संस्करण 1.66 से)। मुख्य लाभ: सख्त टाइपिंग, RFC 6455 मानक का पूर्ण समर्थन, एसिंक्रोनस कार्य के लिए Asio के साथ एकीकरण।



मुख्य विशेषताएं:

  • सिंक्रोनस और एसिंक्रोनस WebSocket क्लाइंट/सर्वर
  • फ्रेम, पिंग/पोंग, कनेक्शन बंद करने का समर्थन
  • TLS पर कार्य (Boost.Asio SSL के माध्यम से)
  • क्रॉस-प्लेटफ़ॉर्म (Linux, Windows, macOS)


WebSocket सर्वर का उदाहरण (एसिंक्रोनस):

#include <boost/beast/core.hpp>#include <boost/beast/websocket.hpp>#include <boost/asio/ip/tcp.hpp>#include <cstdlib>#include <functional>#include <iostream>#include <string>

namespace beast = boost::beast;namespace websocket = beast::websocket;namespace net = boost::asio;using tcp = net::ip::tcp;

void do_session(tcp::socket& socket) { try { websocket::stream<tcp::socket> ws{std::move(socket)}; ws.accept();

for(;;) { beast::flat_buffer buffer; ws.read(buffer); auto msg = beast::buffers_to_string(buffer.data()); std::cout << "Received: " << msg << std::endl;

// इको-उत्तर ws.text(ws.got_text()); ws.write(buffer.data()); } } catch(beast::system_error const& se) { if(se.code() != websocket::error::closed) { std::cerr << "Error: " << se.code().message() << std::endl; } }}

int main() { try { net::io_context ioc{1}; tcp::acceptor acceptor{ioc, {tcp::v4(), 8080}};

for(;;) { tcp::socket socket{ioc}; acceptor.accept(socket); std::thread{std::bind(&do_session, std::move(socket))}.detach(); } } catch(std::exception const& e) { std::cerr << "Error: " << e.what() << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS;}


2. uWebSockets (uWS)



uWebSockets एक उच्च-प्रदर्शन लाइब्रेरी है, जो अधिकतम गति और न्यूनतम मेमोरी खपत पर केंद्रित है। यह C++17 में लिखी गई है और अपना स्वयं का event loop (Boost.Asio नहीं) का उपयोग करती है। यह माइक्रोसर्विसेज और हजारों समवर्ती कनेक्शन वाले अनुप्रयोगों के लिए उपयुक्त है।



मुख्य विशेषताएं:

  • बहुत कम विलंबता (~2-3 माइक्रोसेकंड प्रति संदेश)
  • WebSocket, HTTP और SSE (Server-Sent Events) का समर्थन
  • TLS के लिए अंतर्निहित समर्थन (OpenSSL या BoringSSL के माध्यम से)
  • बाहरी निर्भरता की आवश्यकता नहीं (TLS के लिए OpenSSL को छोड़कर)


सरल WebSocket सर्वर का उदाहरण:

#include "App.h"

int main() { uWS::App().ws<int>("/*", { .open = [](auto* ws) { std::cout << "Client connected" << std::endl; ws->send("Welcome!", uWS::OpCode::TEXT); }, .message = [](auto* ws, std::string_view message, uWS::OpCode opCode) { std::cout << "Received: " <<

अनुशंसाएँ