ماکروهای Prologue و Epilogue در Hyperlane
Middleware ستون فقرات پردازش درخواست در Hyperlane است. اکثر کاربران از middlewareهای استاندارد درخواست (request) و پاسخ (response) استفاده میکنند. با این حال، Hyperlane ماکروهای تخصصی prologue و epilogue را برای کنترل بیشتر ارائه میدهد.
این ماکروها در ابتداییترین و انتهاییترین بخش از چرخه حیات (lifecycle) درخواست اجرا میشوند. آنها به شما اجازه میدهند دقیقاً کنترل کنید که دادهها چه زمانی به کلاینت میرسند.
چرخه حیات درخواست:
• درخواست میرسد: سرور درخواست HTTP را دریافت میکند. • مرحله Prologue: شما دادههای اولیه مانند هدرها (headers) یا کدهای وضعیت (status codes) را ارسال میکنید. • زنجیره Middleware: توابع درخواست را پردازش میکنند. • هندلر مسیر (Route handler): سیستم پاسخ را میسازد. • Middleware پاسخ: توابع پاسخ را پردازش میکنند. • مرحله Epilogue: دادههای نهایی به کلاینت فلاش (flush) شده و اتصالات بسته میشوند.
از این ماکروها برای مدیریت مراحل ۲ و ۶ استفاده کنید.
ماکروهای Send:
از #[try_send] برای دادههای غیرحیاتی استفاده کنید. اگر اتصالی قطع شود، این ماکرو خطا را بدون از کار افتادن سیستم (crash) مدیریت میکند. این قابلیت برای استریمینگ (streaming) که از دست دادن یک تکه (chunk) از دادهها مشکلی ایجاد نمیکند، بسیار مناسب است.
از #[send] برای دادههای حیاتی استفاده کنید. این کار تضمین میکند که دادهها حتماً ارسال شوند.
ماکروهای Flush:
از #[try_flush] برای تلاش جهت خالی کردن بافر (buffer) و مدیریت صحیح خطاها استفاده کنید.
از #[flush] برای اجبار به ارسال تمام دادههای موجود در بافر به کلاینت استفاده کنید. از این دستور برای جلوگیری از دست رفتن دادهها قبل از بستن اتصال استفاده کنید.
بهترین روشها:
- برای دادههای استریمینگ از
#[try_send]استفاده کنید تا در صورت قطع اتصال، از کرش کردن سیستم جلوگیری شود. - زمانی که ارسال داده الزامی است، از
#[send]استفاده کنید. - همیشه قبل از بستن اتصال، بافر خود را flush کنید.
- در مرحله epilogue، متد
stream.is_keep_alive()را برای مدیریت استفاده مجدد از اتصال بررسی کنید. - از این ماکروها برای Server-Sent Events (SSE) جهت ارسال بهروزرسانیهای آنی (real-time) استفاده کنید.
- تمام خطاهای مربوط به send و flush را مدیریت کنید تا از خرابی سیستم جلوگیری شود.
این ابزارها کنترل دقیقی بر جریان داده و زمانبندی پاسخ به شما میدهند.
منبع: https://dev.to/tengxgfyrz67s/prologue-and-epilogue-macros-1n29 کد پروژه: https://github.com/hyperlane-dev/hyperlane