WebSockets في C++: بناء تطبيق فوري من الصفر

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

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

ابدأ الدورة

مقدمة: لماذا لا تزال لغة C++ هي المسيطرة في التطبيقات الفورية؟

\n\n

عندما يتعلق الأمر بالتطبيقات الفورية - الدردشات، دفاتر أوامر البورصة، الألعاب متعددة اللاعبين أو أنظمة المراقبة - يفكر الكثيرون فورًا في Node.js أو Python مع asyncio. وهذا خطأ. تظل C++ ملك الأداء وزمن الاستجابة المنخفض. إذا كنت بحاجة إلى معالجة آلاف الاتصالات بأقل زمن استجابة، فإن WebSockets في C++ هو اختيار المحترفين.

\n\n

في هذه المقالة، سنشرح كيفية تشغيل خادم فوري بلغة C++ باستخدام مكتبات قوية. ستتعرف على ميزة C++ مقارنة بلغات البرمجة النصية، وستحصل على أمثلة كود جاهزة يمكن استخدامها فورًا في المشاريع.

\n\n

لن نطيل الحديث: سنفتح اتصال WebSocket، ونرسل رسالة، ونغلق الجلسة. وسنرى أيضًا كيف يعمل كل هذا تحت الغطاء. هيا بنا!

\n\n

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

\n\n

WebSocket هو بروتوكول يسمح بإنشاء اتصال ثنائي الاتجاه دائم بين العميل والخادم. على عكس HTTP، حيث كل طلب هو معاملة منفصلة، يحافظ WebSocket على "الأنبوب" مفتوحًا. هذا مثالي لـ التطبيقات الفورية في C++ حيث كل ملي ثانية لها أهميتها.

\n\n

سيناريوهات الاستخدام الرئيسية:

\n
    \n
  • محطات التداول المالي: تحديث الأسعار في الوقت الفعلي.
  • \n
  • خوادم الألعاب: مزامنة حالة اللاعبين.
  • \n
  • أنظمة المراقبة: نقل السجلات والمقاييس من أجهزة الاستشعار.
  • \n
  • محررات التعاون: تحرير المستندات بشكل مشترك.
  • \n
\n\n

توفر C++ هنا ميزة لا يمكن إنكارها: التحكم المباشر في الذاكرة، وغياب جامع القمامة (GC)، وإمكانية استخدام الأنماط غير المتزامنة دون عبء الآلة الافتراضية. إذا كنت بحاجة إلى معالجة أكثر من 50,000 اتصال متزامن، فإن خادم WebSocket بلغة C++ سيكون أكثر استقرارًا وسرعة من البدائل.

\n\n

اختيار المكتبة: Boost.Beast أم uWebSockets؟

\n\n

يوجد في سوق C++ لاعبان رئيسيان للعمل مع WebSocket. دعنا نستعرض إيجابيات وسلبيات كل منهما.

\n\n

Boost.Beast - معيار الصناعة

\n

Boost.Beast هي مكتبة مبنية على Boost.Asio. توفر تحكمًا كاملاً في مكدس الشبكة. يستخدمها في الإنتاج عمالقة مثل Facebook (في بعض الأدوات الداخلية) والشركات المالية.

\n
    \n
  • الإيجابيات: أقصى مرونة، دعم HTTP+WebSocket، تكامل مع Asio.
  • \n
  • السلبيات: منحنى تعلم مرتفع، الكثير من الكود للمهام البسيطة.
  • \n
\n\n

uWebSockets - الخفة والسرعة

\n

uWebSockets (uWS) هي غلاف لمكتبة C uSockets. صُممت لتحقيق أقصى أداء وأقل استهلاك للذاكرة. مثالية للخدمات المصغرة.

\n
    \n
  • الإيجابيات: سريع جدًا، واجهة برمجة تطبيقات بسيطة، استهلاك منخفض للذاكرة.
  • \n
  • السلبيات: مجتمع أصغر، تخصيص أكثر صعوبة.
  • \n
\n\n

في مثالنا، سنستخدم Boost.Beast لأنه يوفر المزيد من الإمكانيات للتعلم. ولكن إذا كنت بحاجة إلى تطبيق فوري بسيط بلغة C++ تحت الحمل - فانظر إلى uWS.

\n\n

كتابة خادم WebSocket بسيط بلغة C++ باستخدام Boost.Beast

\n\n

لنقم بإنشاء خادم صدى (echo) بسيط. سيقبل الاتصالات، ويقرأ الرسائل، ويعيد إرسالها مرة أخرى. هذا هو "Hello World" الكلاسيكي لـ WebSocket.

\n\n

تأكد من تثبيت Boost (يفضل الإصدار 1.75+) ومترجم يدعم C++17.

\n\n
#include <boost/beast/core.hpp>\n#include <boost/beast/websocket.hpp>\n#include <boost/asio/ip/tcp.hpp>\n#include <cstdlib>\n#include <functional>\n#include <iostream>\n#include <string>\n#include <thread>\n\nnamespace beast = boost::beast;\nnamespace websocket = beast::websocket;\nnamespace net = boost::asio;\nusing tcp = net::ip::tcp;\n\n// معالجة اتصال WebSocket واحد                

المدونات

توصيات الكتب