قيد الاختبار حاليًا: سيتم فتح كود GitHub عند الاكتمال.

طبقة النقل

العنصرالقيمة
النقلTCP (اتصال دائم)
المنفذ الافتراضي5225
خيارات المقبستفعيل TCP_NODELAY — يرسل الحزم الصغيرة فورًا دون تأخير Nagle التجميعي
TLSاختياري — إذا كان للخادم شهادة مضبوطة، يُغلَّف التدفق بأكمله بـ TLS أحادي الاتجاه (مصادقة الخادم)
الترميزحقول ثنائية بعرض ثابت + مفاتيح UTF-8. الأعداد الصحيحة big-endian (ترتيب الشبكة)
نهاية الإطاربايت \n واحد. لا معالجة لـ \r
الإطار الفارغ\n وحده (موضع op هو \n) يُتجاهل بصمت كإشارة keep-alive
أقصى حجم frame192 bytes — يشمل op دون \n (التجاوز → E line_too_long ثم إغلاق الاتصال)
الأنبوب (pipelining)مسموح — قد تصل الاستجابات بترتيب مختلف عن الطلبات
مهلة الخموللا توجد — لا يغلق الخادم أبدًا اتصالًا هادئًا
زمن تقدم frame5 ثوان كحد أقصى من أول op byte حتى fixed header وLF؛ لا يشغل الإرسال الجزئي الاتصال بلا نهاية

ترتيب إنشاء الاتصال

  1. اتصال TCP
  2. مصافحة TLS، إذا كان TLS مفعّلًا على الخادم — الاتصال بخادم TLS بنص صريح يُقطع عند هذه الخطوة
  3. مصافحة المصادقة، مرة واحدة
  4. تبادل إطارات بروتوكول القفل بعد ذلك

قواعد التأطير (Framing)

كل رسالة هي إطار واحد = سطر واحد.

[ op: بايت واحد ][ رأس ثابت خاص بـ op ][ جسم متغير ] \n

يجب على المستقبِل النظر إلى op وقراءة الرأس الثابت حسب عدد بايتاته أولًا، ثم البحث عن \n بعد ذلك فقط. السبب أن الرأس الثابت ثنائي وقد يحتوي على 0x0A (\n) كقيمة (مثل lease=100A). لا يُطبَّق البحث عن \n إلا على الجزء الأخير من النص/المفتاح.

الاتجاهopالرأس الثابت
العميل ← الخادمA10 bytes (wait:u8 + lease:u8 + owner:u64 BE)
العميل ← الخادمR8 bytes (token:u64 BE)
الخادم ← العميلA16 bytes (token:u64 BE + owner:u64 BE)
الخادم ← العميلT · B8 bytes (owner:u64 BE)
الخادم ← العميلR · N8 bytes (token:u64 BE)
الخادم ← العميلM · L · E0 bytes (address/reason UTF-8 text)

إذا تجاوز frame مقدار 192 bytes أو كان malformed، يعمل الخادم flush لـE إن أمكن ثم يغلق الاتصال. يعامل العميل كذلك malformed وoversized وop المجهول وE غير القابل للربط كـconnection-fatal. لا يُعاد تلقائيًا acquire أُرسل منه بايت واحد في تلك session، ويصبح Indeterminate بلا استجابة نهائية.

المصطلحات

  • الإطار (frame) — الوحدة التي يُقطَّع إليها تدفق البايتات المتواصل (TCP) ليعني "رسالة واحدة". في هذا البروتوكول، كل سطر منتهٍ بـ \n هو إطار واحد.
  • big-endian — ترتيب البايتات الذي يكتب البايت الأكثر أهمية أولًا. هو المعيار في بروتوكولات الشبكة، لذا يُسمى أيضًا ترتيب الشبكة (network order).
  • الأنبوب (pipelining) — إرسال الطلب التالي دون انتظار استجابة الطلب السابق. تراكب زمن الرحلة ذهابًا وإيابًا بهذه الطريقة يرفع الإنتاجية.
  • keep-alive — إشارة بلا معنى تُرسَل دوريًا للإعلان عن أن الاتصال ما زال حيًا. هنا، الإطار الفارغ (\n) يؤدي هذا الدور.