مكتبة WebSocket بلغة C++: أدوات حديثة لتطبيقات الوقت الفعلي
WebSocket هو بروتوكول يوفر اتصالاً ثنائي الاتجاه دائم بين العميل والخادم عبر TCP. على عكس HTTP، يسمح بنقل البيانات في الوقت الفعلي دون طلبات مستمرة. بالنسبة للغة C++، توجد عدة مكتبات قوية تنفذ WebSocket. في هذه المقالة، سنستعرض الثلاثة الأكثر شيوعًا: Boost.Beast وuWebSockets وwebsocketpp، وسنقدم أمثلة عملية لاستخدامها.
لماذا تحتاج مكتبة WebSocket بلغة C++؟
تطوير WebSocket من الصفر مهمة معقدة تتطلب فهمًا عميقًا للبروتوكول وإدارة الاتصالات ومعالجة الإطارات. تقدم المكتبات الجاهزة:
- تنفيذًا كاملاً للبروتوكول RFC 6455
- دعم تشفير SSL/TLS
- إدارة اتصالات متعددة
- معالجة الرسائل المجزأة
- آليات ping/pong للتحقق من الاتصال
- بنية غير متزامنة لأداء عالٍ
Boost.Beast — المعيار الصناعي
Boost.Beast هي مكتبة مبنية على Boost.Asio. توفر تنفيذًا لبروتوكولي HTTP وWebSocket. تُعتبر الحل الأكثر موثوقية وأداءً للغة C++.
التثبيت:
# لأنظمة Ubuntu/Debian:sudo apt install libboost-all-dev
# أو عبر vcpkg:vcpkg install boost-beastمثال لخادم WebSocket بسيط:
#include <boost/beast/core.hpp>#include <boost/beast/websocket.hpp>#include <boost/asio.hpp>#include <iostream>#include <string>
namespace beast = boost::beast;namespace websocket = beast::websocket;namespace net = boost::asio;using tcp = net::ip::tcp;
int main() { try { net::io_context ioc; tcp::acceptor acceptor(ioc, tcp::endpoint(tcp::v4(), 8080));
while (true) { tcp::socket socket(ioc); acceptor.accept(socket);
websocket::stream<tcp::socket> ws(std::move(socket)); ws.accept();
for (int i = 0; i < 5; ++i) { beast::flat_buffer buffer; ws.read(buffer); std::cout << "تم الاستلام: " << beast::make_printable(buffer.data()) << std::endl;
std::string response = "رد الخادم: " + std::to_string(i); ws.write(net::buffer(response)); } } } catch (std::exception const& e) { std::cerr << "خطأ: " << e.what() << std::endl; } return 0;}الميزات:
- تكامل كامل مع Boost.Asio (عمليات غير متزامنة)
- دعم SSL مباشر
- تكاليف عامة ضئيلة للتجريدات
- توثيق وأمثلة شاملة
- مُستخدم في مشاريع الإنتاج (مثل بعض خوادم الألعاب)
uWebSockets — خفيف وسريع
uWebSockets هي مكتبة مكتوبة بلغة C++17، تركز على أقصى أداء وأقل استهلاك للذاكرة. تدعم كلاً من HTTP وWebSocket.
التثبيت:
git clone https://github.com/uNetworking/uWebSockets.gitcd uWebSocketsmakesudo make installمثال لخادم WebSocket:
#include <uwebsockets/App.h>#include <iostream>
int main() { uWS::App() .ws("/*", { .open = [](auto* ws) { std::cout << "تم اتصال العميل!" << std::endl; ws->send("مرحبًا بك!", uWS::OpCode::TEXT); }, .message = [