ماكرو Prologue و Epilogue في Hyperlane

تُعد الـ Middleware العمود الفقري لمعالجة الطلبات في Hyperlane. يستخدم معظم الأشخاص الـ middleware القياسي للطلبات والاستجابات. ومع ذلك، توفر Hyperlane ماكرو prologue و epilogue متخصصين لتوفير تحكم إضافي.

تعمل هذه الماكرو في بداية ونهاية دورة حياة الطلب تمامًا. وهي تتيح لك التحكم بدقة في وقت وصول البيانات إلى العميل.

دورة حياة الطلب:

• وصول الطلب: يستقبل الخادم طلب HTTP. • مرحلة الـ Prologue: ترسل البيانات الأولية مثل الـ headers أو رموز الحالة (status codes). • سلسلة الـ Middleware: تقوم الدوال بمعالجة الطلب. • معالج المسار (Route handler): يقوم النظام ببناء الاستجابة. • middleware الاستجابة: تقوم الدوال بمعالجة الاستجابة. • مرحلة الـ Epilogue: يتم تفريغ البيانات النهائية (flush) إلى العميل وتُغلق الاتصالات.

استخدم هذه الماكرو لإدارة الخطوتين 2 و 6.

ماكرو الإرسال (Send Macros):

استخدم #[try_send] للبيانات غير الحساسة. إذا انقطع الاتصال، فإنه يتعامل مع الخطأ دون توقف النظام (crashing). هذا مفيد لعمليات البث (streaming) حيث لا يشكل فقدان جزء واحد مشكلة.

استخدم #[send] للبيانات الحساسة. يضمن ذلك مرور البيانات بنجاح.

ماكرو التفريغ (Flush Macros):

استخدم #[try_flush] لمحاولة مسح الذاكرة المؤقتة (buffer) والتعامل مع الأخطاء بسلاسة.

استخدم #[flush] لإجبار جميع البيانات المخزنة مؤقتًا على الانتقال إلى العميل. استخدم هذا لمنع فقدان البيانات قبل إغلاق الاتصال.

أفضل الممارسات:

  • استخدم #[try_send] لبيانات البث (streaming) لتجنب توقف النظام عند انقطاع الاتصالات.
  • استخدم #[send] عندما يكون تسليم البيانات إلزاميًا.
  • قم دائمًا بتفريغ الذاكرة المؤقتة (flush your buffer) قبل إغلاق الاتصال.
  • تحقق من stream.is_keep_alive() في الـ epilogue الخاص بك لإدارة إعادة استخدام الاتصال.
  • استخدم هذه الماكرو لـ Server-Sent Events (SSE) لدفع التحديثات في الوقت الفعلي.
  • تعامل مع جميع أخطاء الإرسال (send) والتفريغ (flush) لمنع فشل النظام.

تمنحك هذه الأدوات تحكمًا دقيقًا في تدفق البيانات وتوقيت الاستجابة.

المصدر: https://dev.to/tengxgfyrz67s/prologue-and-epilogue-macros-1n29 كود المشروع: https://github.com/hyperlane-dev/hyperlane