Skip to content
devlog

يوميات التطوير: عالم بلا حدود

كيف يُلغي Atherion ServerMesh شاشات التحميل نهائياً — الانتقال السلس بين الخوادم، من الداخل.

فريق أثيريون
مملكتان متصلتان بمشهد طبيعي سلس دون حدود مرئية

منشور تقني

أثيريون لعبة عالم مفتوح، وهدفنا أن تستوعب مئات الآلاف من اللاعبين في وقت واحد. لتحقيق ذلك، لا بد من تطبيق تقنية تُسمى Server Meshing — ربط خوادم متعددة ببعضها لتعمل كعالم واحد سلس.

بدأنا ببناء نظام شبكي خاص بنا من الصفر فوق NetCode for Entities من Unity، وأسميناه Atherion ServerMesh. اليوم نشارككم أول إثبات مفهوم (PoC) — تجربة مبكرة جداً تُثبت إمكانية نقل كيان واحد بين خادمين بشكل سلس، بدون شاشات تحميل أو تقطّع.

نريد أن نكون واضحين: هذه ليست تقنية جاهزة، بل خطوة أولى في طريق طويل. الانتقال السلس بين خوادم متعددة في الوقت الحقيقي هو من أصعب التحديات التقنية في صناعة الألعاب، والموارد المتاحة عنه شحيحة جداً. قلّة قليلة من الاستوديوهات حاولت بناء شيء مشابه، ولا يوجد حل جاهز يمكن شراؤه أو تحميله.

المشكلة التي نحاول حلها

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

في معظم الألعاب، هذا يعني شاشة تحميل. تجمّد لحظي. انتقال آني. وميض من الارتداد المطاطي. هدفنا أن يختلف أثيريون — أن تعبر حدود الخادم كما تعبر نهراً، بالمشي، دون أن تلاحظ.

ماذا يُظهر الإثبات: مناطق العازل

الفكرة التي يختبرها هذا الإثبات بسيطة بشكل مخادع: بدلاً من خط فاصل حاد بين خادمين، نُنشئ منطقة عازلة (Buffer Zone) — منطقة تداخل يعمل فيها كلا الخادمين على محاكاة كيانك في الوقت ذاته.

تخيّلها كإقليم حدودي تطالب به مملكتان. كلتا المملكتين لديها كشّافة تجوب المنطقة، وكلتاهما تُبقي أبراج مراقبة، وكلتاهما تتعقب كل نفس تتحرك فيها. الإقليم لا ينتمي لمملكة دون الأخرى — ينتمي لكليهما، حتى اللحظة التي تعبر فيها النهر في قلبه.

إليك ما يحدث فعلاً حين تقترب شخصيتك من حدود منطقة:

الدخول إلى منطقة العازل

شخصيتك على بُعد 300 متر من الحدود. الخادم A، الذي يملك سلطة التحكم بك حالياً، يُرسل رسالة إلى الخادم B: “جهّز نسخة ظلية من هذا الكيان.” الخادم B يُنشئ نسخة — مرآة تتلقى تحديثات الموقع 60 مرة في الثانية. كلا الخادمين الآن يُحاكيان شخصيتك. الخادم A يقود، والخادم B يتبع.

من منظورك أنت، لا شيء يتغير. العالم يتدفق من حولك. تواصل المشي.

تحويل الصلاحية

تعبر الحدود. في رسالة واحدة — أسرع من إطار واحد من الرسوم المتحركة — تُحوَّل الصلاحية. الخادم B يقود كيانك الآن. الخادم A يصبح التابع، مُحتفظاً بنسخة ظلية تحسباً لعودتك.

لا إعادة اتصال. لا تلعثم. لا مدخلات ضائعة. حركة شخصيتك مستمرة، وكأن الحدود لم تكن موجودة قط.

التنظيف

تتعمق أكثر في المنطقة الجديدة، 300 متر بعد الحدود. الخادم A يُدمّر نسخته الظلية بهدوء. عملية التسليم اكتملت. النظام جاهز للتكرار متى اقتربت من حدود أخرى — أو استدرت وعدت أدراجك.

ما الذي يبقى بعد العبور

في هذا الإثبات، حين يعبر الكيان من خادم إلى آخر، تنتقل معه بياناته — الصحة، سرعة الحركة، الأهداف النشطة. بنينا إطار عمل للتسلسل (Generic Serialization) يسمح بنقل أي بنية بيانات مخصصة عبر الخوادم.

في المستقبل، هذا يعني أن شخصيتك وكل بياناتها ستسافر معك. الخادم يتغير، أنت لا تتغير. لكننا لم نصل إلى هناك بعد — هذا الإثبات يُظهر أن الآلية تعمل.

ستون تحديثاً في الثانية

بينما تتحرك شخصيتك عبر منطقة العازل، يتبادل الخادمان تصحيحات الموقع بمعدل 60Hz — ستون تحديثاً في الثانية. هذا ليس معدل النبض الشبكي العادي. هذا تيار عالي التردد مخصص يضمن أن حركتك تبدو سلسة تماماً لكل لاعب على كلا الخادمين.

للحفاظ على عرض النطاق تحت السيطرة، نستخدم ضغط الفروقات (Delta Compression): فقط الإحداثيات التي تغيرت فعلاً هي التي تُرسل. تحديث الموقع الكامل يكلف 61 بايت. تحديث الفرق يكلف حوالي 15 فقط. هذا تخفيض بنسبة 75% في عرض النطاق دون أي خسارة في نعومة الحركة المرئية.

النتيجة: الأعداء الذين يتعقبونك من الجانب الآخر لحدود المنطقة يرون موقعك يُحدَّث كل 16 ميلي ثانية. لا ارتعاش، لا فجوة في الاستيفاء، لا “خطوة شبحية” تبدو فيها وكأنك انتقلت آنياً للأمام.

مجمع عوالم العميل

على جانب العميل، النهج التقليدي يتطلب أن تحتفظ لعبتك باتصال منفصل مع كل خادم قد تدخله — استراتيجية مكلفة وهشّة. بدلاً من ذلك، يستخدم أثيريون مجمع عوالم العميل (Client World Pool): مجموعة من الاتصالات القابلة لإعادة الاستخدام تنشط حين تقترب من منطقة جديدة وتخمد حين تبتعد.

حين تمشي باتجاه حدود، يُسخّن المجمع اتصالاً بالخادم المجاور بصمت. بحلول لحظة تحويل الصلاحية، يكون عميلك متزامناً بالفعل. حين تبتعد، يخمد الاتصال لكنه يبقى حياً — جاهزاً لإعادة التفعيل فوراً إن عدت.

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

العرض التوضيحي: رؤية النظام حياً

في العرض التوضيحي، سترى كياناً يتحرك بشكل مستمر عبر حدود منطقة. راقب مؤشر الصلاحية — يتحول من الذهبي (الخادم A) إلى الأزرق (الخادم B) في اللحظة الدقيقة للانتقال. الحركة لا تتوقف أبداً. واجهة المعلومات تعرض مقاييس حية: حالة العازل تتحول من Normal إلى InBuffer إلى Crossing ثم تعود إلى Normal، وخريطة مصغرة للمنطقة تتتبع موقع الكيان، وسجل أحداث حي يلتقط كل رسالة متبادلة بين الخادمين.

ما تراه في العرض هو خادمان حقيقيان يعملان كعمليتين منفصلتين — الخادم الأول يعمل في الخلفية بدون واجهة (headless) ويدير المنطقة الأولى، بينما الخادم الثاني يعمل مع عميل اللعبة في النافذة التي تشاهدها. الاثنان يتواصلان عبر شبكة UDP حقيقية، تماماً كما سيحدث في بيئة الإنتاج. هذا ليس محاكاة داخلية — بل إثبات فعلي لعمل النظام عبر الشبكة.


تحت الغطاء — لمحبي التفاصيل التقنية

لمن يريد أن يعرف كيف تدور التروس، إليكم نظرة على البنية التحتية التي نبنيها. هذه هي الهندسة المعمارية التي صمّمناها — بعضها مُطبّق في الإثبات الحالي، وبعضها مخطط للمراحل القادمة.

بروتوكول S2S الثنائي

الخوادم تتواصل عبر بروتوكول ثنائي مضغوط برأس 8 بايت: توقيع سحري، بايت إصدار، نوع الرسالة، و4 بايت لطول الحمولة. ستة أنواع من الرسائل تتعامل مع دورة الحياة بأكملها — CreateBufferEntity و Correction و TransferAuthority و DestroyBufferEntity و DeltaCorrection و Handshake.

طوبولوجيا الشبكة المتعددة الخوادم

الإثبات الحالي يعمل بخادمين فقط، لكن البنية صُممت لدعم شبكة N-خادم — ستة عشر أو أكثر في المستقبل. كل خادم يملك خلية واحدة في شبكة (مثلاً شبكة 4×4 من ستة عشر منطقة بمساحة 1 كم²) ويعرف عناوين جيرانه عند البدء. الصلاحية حتمية: موقعك يحدد أي خادم يملكك، دون حَكَم مركزي.

تقسيم معرّفات الكيانات

كل خادم يُخصَّص له نطاق من مليون معرّف كيان، مما يضمن ألا ينتج خادمان تصادماً أبداً. حين يُنشأ كيان ظلي على خادم مجاور، يتلقى معرّفاً فريداً عالمياً يستمر عبر كل مرحلة من مراحل الانتقال.

الاستمرارية عبر الأعطال

إلى جانب الانتقال السلس، يتضمن Atherion ServerMesh طبقة استمرارية كاملة. حالة الكيانات تُكتب إلى نظام تخزين متدرج — لقطات دورية إلى Redis، والأحداث الحرجة عبر سجل كتابة مسبق (Write-Ahead Log)، وأرشفة دائمة إلى PostgreSQL. إذا تعطل خادم أثناء الانتقال، الاسترداد تلقائي. شخصيتك وكل بياناتها تُستعاد من آخر حالة مؤكدة.


أين نحن الآن — وأين نتجه

نريد أن نكون صريحين: ما تشاهدونه هو إثبات مفهوم (Proof of Concept) — الهيكل العظمي للنظام. التجارب الأولية تعمل، و535 اختباراً ناجحاً يؤكد أن الأساس صلب. لكننا في بداية الطريق.

تحويل هذا النظام من تجربة مخبرية إلى منتج جاهز للإنتاج سيستغرق وقتاً طويلاً — ربما سنوات. أمامنا تحديات كبيرة:

  • الحالات الحدية — كيانات على تقاطع أربعة خوادم، عبور سريع ذهاباً وإياباً، تدهور الشبكة، ونقل جماعي أثناء الحصارات
  • الأداء على نطاق واسع — تحسين الأداء لمئات اللاعبين عبر عشرات الخوادم
  • الاستقرار في الإنتاج — تشخيصات ومراقبة بمستوى إنتاجي
  • ما بعد v1.0 — طوبولوجيا ديناميكية، بنية خوادم هرمية لعناقيد من ألف خادم أو أكثر

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

الطريق طويل، لكن الأساس بُني. وكل خطوة من هنا تقرّبنا من عالم بلا حدود حقيقياً.