مقدمة: لماذا لا تزال لغة C++ هي المسيطرة في التطبيقات الفورية؟
\n\nعندما يتعلق الأمر بالتطبيقات الفورية - الدردشات، دفاتر أوامر البورصة، الألعاب متعددة اللاعبين أو أنظمة المراقبة - يفكر الكثيرون فورًا في Node.js أو Python مع asyncio. وهذا خطأ. تظل C++ ملك الأداء وزمن الاستجابة المنخفض. إذا كنت بحاجة إلى معالجة آلاف الاتصالات بأقل زمن استجابة، فإن WebSockets في C++ هو اختيار المحترفين.
\n\nفي هذه المقالة، سنشرح كيفية تشغيل خادم فوري بلغة C++ باستخدام مكتبات قوية. ستتعرف على ميزة C++ مقارنة بلغات البرمجة النصية، وستحصل على أمثلة كود جاهزة يمكن استخدامها فورًا في المشاريع.
\n\nلن نطيل الحديث: سنفتح اتصال WebSocket، ونرسل رسالة، ونغلق الجلسة. وسنرى أيضًا كيف يعمل كل هذا تحت الغطاء. هيا بنا!
\n\nما هو WebSocket ولماذا هو مطلوب في C++؟
\n\nWebSocket هو بروتوكول يسمح بإنشاء اتصال ثنائي الاتجاه دائم بين العميل والخادم. على عكس HTTP، حيث كل طلب هو معاملة منفصلة، يحافظ WebSocket على "الأنبوب" مفتوحًا. هذا مثالي لـ التطبيقات الفورية في C++ حيث كل ملي ثانية لها أهميتها.
\n\nسيناريوهات الاستخدام الرئيسية:
\n- \n
- محطات التداول المالي: تحديث الأسعار في الوقت الفعلي. \n
- خوادم الألعاب: مزامنة حالة اللاعبين. \n
- أنظمة المراقبة: نقل السجلات والمقاييس من أجهزة الاستشعار. \n
- محررات التعاون: تحرير المستندات بشكل مشترك. \n
توفر C++ هنا ميزة لا يمكن إنكارها: التحكم المباشر في الذاكرة، وغياب جامع القمامة (GC)، وإمكانية استخدام الأنماط غير المتزامنة دون عبء الآلة الافتراضية. إذا كنت بحاجة إلى معالجة أكثر من 50,000 اتصال متزامن، فإن خادم WebSocket بلغة C++ سيكون أكثر استقرارًا وسرعة من البدائل.
\n\nاختيار المكتبة: Boost.Beast أم uWebSockets؟
\n\nيوجد في سوق C++ لاعبان رئيسيان للعمل مع WebSocket. دعنا نستعرض إيجابيات وسلبيات كل منهما.
\n\nBoost.Beast - معيار الصناعة
\nBoost.Beast هي مكتبة مبنية على Boost.Asio. توفر تحكمًا كاملاً في مكدس الشبكة. يستخدمها في الإنتاج عمالقة مثل Facebook (في بعض الأدوات الداخلية) والشركات المالية.
\n- \n
- الإيجابيات: أقصى مرونة، دعم HTTP+WebSocket، تكامل مع Asio. \n
- السلبيات: منحنى تعلم مرتفع، الكثير من الكود للمهام البسيطة. \n
uWebSockets - الخفة والسرعة
\nuWebSockets (uWS) هي غلاف لمكتبة C uSockets. صُممت لتحقيق أقصى أداء وأقل استهلاك للذاكرة. مثالية للخدمات المصغرة.
\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 واحد