كل المقالات

تشريح حجز تاكسي في الوقت الفعلي

الوقت الفعلي · 2 دقيقة قراءة ·

بنيت الواجهة الخلفية لنظام حجز تاكسي في تورونتو، وأكثر ما يمكن أن أقدّمه لك ليس الكود. إنها الصورة التي كنت أرسمها في كل مكالمة مع الفريق:

الراكب السائق خادم التوزيع 1 · «احجز تاكسي» 2 · «مهمة جديدة!» إشارة الموقع كل 2 ثانية 3 · موقع السيارة، لحظيًا 4 · مكالمة صوتية مباشرة: من هاتف لهاتف، لا تمرّ بالخادم إطلاقًا الأسهم 1 إلى 3 تسير كل منها على اتصال حيّ واحد؛ فتح اتصال جديد مع كل إشارة كان سيُذيب الخادم
النظام كله في رسمة واحدة: هاتفان، خادم واحد بينهما، ومكالمة صوتية تتجاوزه تمامًا.

القرارات الثلاثة الأهم

⁨WebSockets⁩، لا ⁨polling⁩. السائق يرسل موقعه كل 2 ثانية. عبر ⁨HTTP⁩ هذا يعني اتصالًا جديدًا وترويسات ومصادقة مع كل إشارة. عبر ⁨WebSocket⁩ واحد، الأمر لا يتعدّى إطارًا من 30 بايت. مع 200 سائق متصل في آنٍ واحد، هذا هو الفرق الحاسم.

الخادم يملك مهمة المطابقة فقط، لا أكثر. خادم التوزيع يقرّر أي سائق يأخذ المهمة، وينقل المواقع. هو لا يحمل المكالمة الصوتية.

الصوت ينتقل من نظير إلى نظير. ⁨WebRTC⁩ يحتاج الخادم مرة واحدة فقط، للمصافحة (رسائل تشبه السهمين 1 و2 لتبادل عناوين الشبكة). بعدها، الصوت يتدفّق من هاتف لهاتف. تكلفة نطاق ترددي صفرية على جانبك، وزمن استجابة أقل لهما.

كل ما هو لحظي في هذا النظام هو توزيع لحقائق صغيرة: «تحرّك السائق»، «قُبلت المهمة»، «وصلت السيارة». إن نمذجته كأحداث وأبقيت كل حدث صغيرًا، تبقى البنية بسيطة، والبساطة هي ما تريده الساعة 2 صباحًا حين تضيع سيارة أجرة.

المكوّنات لمن يريد التفاصيل: ⁨Laravel⁩ لواجهة الـ⁨API⁩ والمطابقة، ⁨WebSockets⁩ للقناة الحيّة، ⁨WebRTC⁩ للمكالمات، وطابور (انظر المقال الأول) للإيصالات والإشعارات.

ملاحظات القراء

  1. لا توجد ملاحظات بعد. الأولى دائمًا الأجرأ.
باغي دير حاجة بحال هذي؟ نقدر نعاونك. تواصل