ما هو WebSocket ولماذا تحتاج إلى مكتبة بلغة C++؟
WebSocket هو بروتوكول اتصال يوفر قناة ثنائية الاتجاه (full-duplex) عبر اتصال TCP واحد. على عكس HTTP، يسمح للخادم والعميل بتبادل البيانات في الوقت الفعلي دون الحاجة إلى طلبات مستمرة. بالنسبة للغة C++، توجد العديد من المكتبات التي تسهل دمج WebSocket في التطبيقات. واحدة من أشهرها هي Boost.Beast (جزء من مكتبات Boost C++ Libraries). توفر هذه المكتبة واجهة برمجة تطبيقات (API) منخفضة المستوى وعالية المستوى للعمل مع WebSocket وHTTP.
كيفية تثبيت Boost.Beast؟
Boost.Beast هي مكتبة تعتمد على الرؤوس فقط (header-only library) (حتى الإصدار 1.75) أو جزء من Boost يتطلب التجميع. طريقة التثبيت:
# Ubuntu / Debiansudo apt install libboost-all-dev
# macOS (Homebrew)brew install boost
# Windows (vcpkg)vcpkg install boost-beastبالنسبة لوضع الرؤوس فقط (header-only mode)، يكفي نسخ ملفات الرأس (header files) إلى المشروع.
الوظائف الرئيسية للمكتبة
- عميل وخادم WebSocket — دعم اتصالات كل من العميل والخادم.
- العمل غير المتزامن (Asynchronous) — التكامل مع Boost.Asio للإدخال/الإخراج غير المحظور (non-blocking I/O).
- دعم SSL/TLS — اتصالات آمنة عبر Boost.Asio SSL.
- تأطير (Framing) وإطارات التحكم — معالجة تلقائية لـ ping/pong و close.
- ترقية HTTP (HTTP upgrade) — دعم مدمج للمصافحة (handshake) من HTTP إلى WebSocket.
مثال كود: خادم WebSocket بسيط بلغة C++
#include <boost/beast/core.hpp>#include <boost/beast/websocket.hpp>#include <boost/asio/ip/tcp.hpp>#include <iostream>#include <string>
namespace beast = boost::beast;namespace http = beast::http;namespace websocket = beast::websocket;namespace net = boost::asio;using tcp = net::ip::tcp;
int main() { try { net::io_context ioc{1}; tcp::acceptor acceptor{ioc, {tcp::v4(), 8080}}; tcp::socket socket{ioc}; acceptor.accept(socket);
websocket::stream<tcp::socket> ws{std::move(socket)}; ws.accept();
for(;;) { beast::flat_buffer buffer; ws.read(buffer); std::string message = beast::buffers_to_string(buffer.data()); std::cout << "Received: " << message << std::endl; ws.write(beast::buffer("Echo: " + message)); } } catch(std::exception const& e) { std::cerr << "Error: " << e.what() << std::endl; return 1; } return 0;}يقوم هذا المثال بإنشاء خادم على المنفذ 8080، ويقبل اتصالاً واحداً، ويقرأ الرسائل ويرسلها مرة أخرى مع البادئة "Echo: ".
متى تستخدم مكتبة WebSocket بلغة C++؟
المكتبة مناسبة للمشاريع التي تكون فيها الأداء وزمن الوصول المنخفض أمراً مهماً: غرف الدردشة، الألعاب عبر الإنترنت، أنظمة التداول المالي، المراقبة في الوقت الفعلي، وأجهزة إنترنت الأشياء (IoT). إذا كنت بحاجة إلى أداة موثوقة ومتعددة المنصات (cross-platform) مع مجتمع نشط، فإن Boost.Beast هو الخيار الأفضل للغة C++.
```