Макроси Prologue та Epilogue в Hyperlane
Middleware є основою обробки запитів у Hyperlane. Більшість користувачів використовують стандартне middleware для запитів та відповідей. Однак Hyperlane пропонує спеціалізовані макроси prologue та epilogue для додаткового контролю.
Ці макроси виконуються на самому початку та на самому завершенні життєвого циклу запиту. Вони дозволяють точно контролювати, коли саме дані потрапляють до клієнта.
The Request Lifecycle:
• Надходження запиту: сервер отримує HTTP-запит. • Фаза prologue: ви надсилаєте початкові дані, такі як заголовки або коди статусів. • Ланцюжок middleware: функції обробляють запит. • Обробник маршруту: система формує відповідь. • Middleware відповіді: функції обробляють відповідь. • Фаза epilogue: фінальні дані відправляються клієнту (flush), і з'єднання закриваються.
Використовуйте ці макроси для керування кроками 2 та 6.
The Send Macros:
Використовуйте #[try_send] для некритичних даних. Якщо з'єднання розірветься, він обробить помилку без аварійного завершення програми. Це добре підходить для стрімінгу, де втрата одного фрагмента не є критичною.
Використовуйте #[send] для критично важливих даних. Це гарантує, що дані будуть доставлені.
The Flush Macros:
Використовуйте #[try_flush], щоб спробувати очистити буфер і коректно обробити помилки.
Використовуйте #[flush], щоб примусово відправити всі дані з буфера клієнту. Використовуйте це, щоб запобігти втраті даних перед закриттям з'єднання.
Best Practices:
- Використовуйте
#[try_send]для стрімінгу даних, щоб уникнути збоїв при розірванні з'єднань. - Використовуйте
#[send], коли доставка даних є обов'язковою. - Завжди очищуйте (flush) буфер перед закриттям з'єднання.
- Перевіряйте
stream.is_keep_alive()у вашому epilogue, щоб керувати повторним використанням з'єднань. - Використовуйте ці макроси для Server-Sent Events (SSE), щоб надсилати оновлення в режимі реального часу.
- Обробляйте всі помилки
sendтаflush, щоб запобігти збоям системи.
Ці інструменти забезпечують точний контроль над потоком даних та часом формування відповіді.
Source: https://dev.to/tengxgfyrz67s/prologue-and-epilogue-macros-1n29 Project Code: https://github.com/hyperlane-dev/hyperlane