الشات المباشر، الإشعارات الفورية، تتبّع الطلبات على الخريطة، لوحات التحكّم التي تتحدّث لحظياً — كلها تحتاج تقنية Real-Time تدفع البيانات للمستخدم فور حدوثها بدل انتظار تحديث الصفحة. الحلّ هو WebSockets، وقد أطلقت Laravel خادمها الرسمي Laravel Reverb لهذا الغرض. لكن السؤال الأهمّ لأي مشروع جدّي: كم اتصالاً متزامناً يتحمّل خادم VPS واحد؟ في هذا الدليل نبني تطبيق Real-Time بـLaravel Reverb، ونجيب عن سؤال السعة باختبار حقيقي على خادم من مرام — والرقم مفاجئ.

بنية تطبيق Real-Time مع Laravel Reverb وWebSockets
العملاء يتصلون بـReverb عبر WebSocket، وLaravel يبثّ الأحداث، وRedis يتيح التوسّع.

ما هو Laravel Reverb؟

Laravel Reverb هو خادم WebSocket رسمي وسريع من Laravel، مكتوب ليعمل ضمن نظام Laravel البيئي بسلاسة. يفتح قناة اتصال دائمة ثنائية الاتجاه بين خادمك والمتصفّح أو التطبيق، فبدل أن يسأل العميل الخادم باستمرار (Polling)، يدفع الخادم البيانات فور توفّرها. النتيجة: تجربة لحظية حقيقية بأقلّ زمن استجابة، متوافقة مع بروتوكول Pusher فتعمل مع مكتبات Laravel Echo الجاهزة.

كيف يعمل البثّ اللحظي

الفكرة كما في المخطط أعلاه: يفتح كل عميل اتصال WebSocket دائماً مع Laravel Reverb. حين يقع حدث في تطبيقك (رسالة جديدة، تحديث حالة طلب)، يبثّه Laravel عبر نظام الأحداث (Broadcasting)، فيستلمه Reverb ويدفعه فوراً لكل العملاء المشتركين في تلك القناة. الاتصال ثنائي الاتجاه، فيمكن للعميل أيضاً إرسال بيانات (كما في الشات) عبر نفس القناة.

حالات الاستخدام

تفتح تقنية WebSockets باباً واسعاً من الميزات اللحظية:

  • الشات المباشر: رسائل فورية بين المستخدمين دون تحديث الصفحة.
  • الإشعارات الفورية: تنبيه المستخدم لحظة وصول طلب أو رسالة أو حدث مهمّ.
  • التتبّع الحيّ (Live Tracking): تحديث موقع سائق التوصيل أو حالة الطلب على الخريطة لحظياً.
  • لوحات التحكّم الحيّة (Live Dashboards): أرقام ومبيعات ومؤشّرات تتحدّث أمام عينك دون إعادة تحميل.

الإعداد الأساسي

إعداد Laravel Reverb مباشر. ثبّته، اضبطه، ثم شغّل الخادم:

composer require laravel/reverb
php artisan reverb:install   # يضبط البثّ ومفاتيح الاتصال

# تشغيل خادم WebSocket
php artisan reverb:start --host=0.0.0.0 --port=8080

لبثّ حدث من تطبيقك إلى كل المتصلين، أنشئ حدثاً قابلاً للبثّ وأطلقه بسطر واحد:

// حدث يُبثّ على قناة
broadcast(new MessageSent($message));

// وفي الواجهة عبر Laravel Echo:
// Echo.channel('chat').listen('MessageSent', (e) => { ... });
⚠️ في الإنتاج شغّل Reverb تحت Supervisor ليبقى يعمل دائماً، وضعه خلف Nginx مع تشفير WSS (WebSocket فوق TLS) لأمان الاتصال.

السرّ لتجاوز 1024 اتصال

هنا أهمّ درس عملي اكتشفناه أثناء الاختبار: خادم WebSocket في PHP يعتمد على «حلقة أحداث» (Event Loop). الحلقة الافتراضية stream_select محدودة بـ1024 اتصالاً فقط (حدّ في نظام التشغيل)، فيتعطّل الخادم عند تجاوزها مهما رفعت حدود الموارد.

تجاوز حدّ 1024 اتصال في Laravel Reverb عبر امتداد ext-ev
بدون امتداد حلقة أحداث يتوقّف الخادم عند ~1024 اتصال؛ مع ext-ev يتجاوز عشرات الآلاف.

الحلّ بسيط لكنه حاسم: ثبّت امتداد حلقة أحداث فعّالة مثل ext-ev (أو ext-event)، فيكتشفه Reverb تلقائياً ويستخدمه، ويرتفع السقف من 1024 إلى عشرات الآلاف:

sudo pecl install ev
# ثم فعّل الامتداد وأعِد تشغيل Reverb — يكتشفه تلقائياً

اختبار سعة Laravel Reverb الحقيقي

الآن السؤال الحاسم: كم اتصالاً يتحمّل خادم VPS واحد فعلياً؟ على خادم من مرام (4 vCPU / 8GB) شغّلنا Laravel Reverb مع ext-ev، وفتحنا آلاف اتصالات WebSocket الحقيقية دفعةً واحدة، وقِسنا:

نتيجة اختبار سعة Laravel Reverb: 29,500 اتصال WebSocket متزامن على VPS واحد
النتيجة الفعلية: ~29,500 اتصال ثابت، ~19 KB لكل اتصال، والموقع بقي عند 13 مللي ثانية.

النتيجة قوية: حافظ خادم واحد على ~29,500 اتصال WebSocket متزامن بثبات وبصفر أخطاء، مستهلكاً ~19 كيلوبايت ذاكرة لكل اتصال (615MB فقط من 8GB) و38% من المعالج — وبقي زمن استجابة الموقع أثناء ذلك عند 13 مللي ثانية. الأهمّ: هذا السقف فرضه عدد منافذ العميل في اختبارنا لا الخادم — فذاكرة الخادم تتّسع لأضعاف هذا العدد.

⚠️ شفافية: الاتصالات كانت خاملة (محافظة على الاتصال) لقياس سعة الاستيعاب؛ التطبيقات كثيفة الرسائل تستهلك معالجاً أكثر لكل اتصال. الرقم مقاس فعلياً على خادم مرام، ويتوسّع بزيادة الذاكرة وعدد الخوادم.

التوسّع عبر عدة خوادم

حين تتجاوز حاجتك سعة خادم واحد، يتوسّع Laravel Reverb أفقياً: شغّل عدة خوادم Reverb خلف موازِن حِمل، واستخدم Redis كوسيط بثّ (pub/sub) بينها، فيصل الحدث المبثوث من أي خادم إلى كل العملاء المتصلين بأي خادم آخر. هكذا تخدم مئات الآلاف من الاتصالات المتزامنة عبر عدة عُقد.

اقرأ أيضاً: Laravel Horizon وRedis Queues: معالجة ملايين المهام دون إبطاء الموقع

الخلاصة

Laravel Reverb يجعل بناء تطبيقات Real-Time (شات، إشعارات، تتبّع، لوحات حيّة) في متناول أي مطوّر Laravel. وكما أثبت اختبارنا الحقيقي، خادم VPS واحد يتحمّل عشرات الآلاف من اتصالات WebSocket المتزامنة — شرط تفعيل امتداد حلقة أحداث فعّالة (ext-ev) وضبط حدود النظام. ابدأ بخادم واحد، وتوسّع عبر Redis وعدة خوادم حين تكبر. للتعمّق راجع توثيق Laravel Reverb الرسمي.

من واقع مرام

نشغّل Reverb ونختبر سعته على خوادمنا فعلياً — الأرقام في هذا المقال مقاسة على عتاد مرام. نساعدك في إعداد Reverb وext-ev وSupervisor وتشفير WSS وضبط حدود النظام على VPS بأداء NVMe ودعم عربي.

ابنِ تطبيق Real-Time يتحمّل الآلاف

خوادم VPS من مرام جاهزة لـLaravel Reverb — أداء عالٍ، Redis، ودعم عربي تقني.

شغّل Reverb على VPS مرام ←