WebSocket على C++: إنشاء تطبيقات الوقت الفعلي من الصفر

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

WebSocket على C++: إنشاء تطبيقات في الوقت الفعلي



في الويب الحديث، اعتاد المستخدمون على التحديث الفوري للبيانات: خلاصات الأخبار، والدردشات، والألعاب عبر الإنترنت، وأسعار البورصة تعمل دون إعادة تحميل الصفحة. تتيح تقنية WebSocket إنشاء اتصال ثنائي الاتجاه دائم بين العميل والخادم، مما يضمن نقل البيانات في الوقت الفعلي. في هذه المقالة، سنشرح كيفية تنفيذ WebSocket باستخدام C++ — وهي لغة قوية وعالية الأداء، مثالية للأنظمة عالية التحميل.



ستتعرف على المكتبات التي يجب استخدامها، وكيفية كتابة خادم وعميل، بالإضافة إلى استعراض أمثلة عملية: من دردشة بسيطة إلى نظام إشعارات. المقالة موجهة للمطورين الملمين بأساسيات C++ وبرمجة الشبكات.



ما هو WebSocket ولماذا هو مطلوب في C++؟



WebSocket هو بروتوكول يعمل فوق TCP، ويوفر اتصالاً مزدوجاً كاملاً. على عكس HTTP، حيث يرسل العميل طلباً وينتظر الرد، يسمح WebSocket للخادم ببدء إرسال البيانات بنفسه. وهذا يجعله لا غنى عنه لتطبيقات الوقت الفعلي:



  • الدردشات والمراسلات الفورية — توصيل فوري للرسائل.
  • الألعاب عبر الإنترنت — مزامنة حالة اللاعبين.
  • الأنظمة المالية — تحديث الأسعار وأسعار الصرف.
  • إنترنت الأشياء والمراقبة — نقل البيانات المتدفقة من أجهزة الاستشعار.


يتم اختيار C++ لمثل هذه المهام بفضل أدائها العالي، واستهلاكها المنخفض للذاكرة، والوصول المباشر إلى موارد الشبكة. وهذا أمر بالغ الأهمية للأنظمة التي تحتوي على آلاف الاتصالات المتزامنة.



مكتبات العمل مع WebSocket في C++



كتابة WebSocket من الصفر على المقابس الخام (raw sockets) هي مهمة شاقة. لحسن الحظ، توجد مكتبات موثوقة تتولى تنفيذ البروتوكول.



1. Boost.Beast

جزء من نظام Boost البيئي، مبني على ASIO. يوفر تحكماً منخفض المستوى، ومعالجة غير متزامنة، وأداءً ممتازاً. يُوصى به للمشاريع الصناعية.



2. WebSocket++

مكتبة خفيفة الوزن، لا تعتمد على Boost. تدعم كلاً من الأوضاع المتزامنة وغير المتزامنة. مثالية للنمذجة الأولية السريعة.



3. uWebSockets

موجهة نحو أقصى سرعة. تُستخدم في بيئات الإنتاج لمعالجة ملايين الاتصالات. تتطلب عملاً دقيقاً مع الذاكرة.



في هذه المقالة، سنركز على Boost.Beast باعتباره الحل الأكثر توازناً.



تطبيق عملي: إنشاء خادم WebSocket بلغة C++



لننظر في مثال لخادم صدى (echo server) بسيط، يستقبل الاتصالات ويعيد إرسال الرسائل المستلمة. للتجميع، ستحتاج إلى تثبيت Boost ومترجم يدعم C++17.



الخطوة 1: تجهيز البيئة

قم بتثبيت Boost (على سبيل المثال، عبر vcpkg أو مدير الحزم). قم بتضمين ملفات الرأس:



#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 websocket = beast::websocket;namespace net = boost::asio;using tcp = net::ip::tcp;


الخطوة 2: تنفيذ الخادم

سننشئ خادماً غير متزامن، يستقبل اتصالاً واحداً ويعالجه في حلقة:



void do_session(tcp::socket& socket) {    try {        // إنشاء دفق WebSocket من المقبس        websocket::stream<tcp::socket> ws(std::move(socket));        ws.accept(); // تنفيذ المصافحة

std::cout << "تم إنشاء اتصال WebSocket!" << std::endl;

for (;;) { beast::flat_buffer buffer; ws.read(buffer); // قراءة رسالة من العميل std::string msg = beast::buffers_to_string(buffer.data()); std::cout << "تم الاستلام: " << msg << std::endl;\

المدونات

توصيات الكتب