Makra Prologue i Epilogue w Hyperlane
Middleware stanowi kręgosłup przetwarzania żądań w Hyperlane. Większość osób korzysta ze standardowego middleware'u żądań i odpowiedzi. Hyperlane oferuje jednak specjalistyczne makra prologue i epilogue dla uzyskania dodatkowej kontroli.
Makra te działają na samym początku i na samym końcu cyklu życia żądania. Pozwalają one kontrolować dokładnie moment, w którym dane docierają do klienta.
Cykl życia żądania:
• Żądanie przychodzi: Serwer otrzymuje żądanie HTTP. • Faza prologue: Wysyłasz dane początkowe, takie jak nagłówki lub kody statusu. • Łańcuch middleware: Funkcje przetwarzają żądanie. • Obsługa trasy (Route handler): System buduje odpowiedź. • Middleware odpowiedzi: Funkcje przetwarzają odpowiedź. • Faza epilogue: Końcowe dane są przesyłane z bufora do klienta, a połączenia są zamykane.
Użyj tych makr, aby zarządzać krokami 2 i 6.
Makra Send:
Użyj #[try_send] dla danych niekrytycznych. Jeśli połączenie zostanie przerwane, makro obsłuży błąd bez powodowania awarii systemu. Jest to przydatne w przypadku strumieniowania, gdzie utrata jednego fragmentu nie jest problemem.
Użyj #[send] dla danych krytycznych. Zapewnia to dostarczenie danych.
Makra Flush:
Użyj #[try_flush], aby spróbować wyczyścić bufor i w sposób kontrolowany obsłużyć błędy.
Użyj #[flush], aby wymusić przesłanie wszystkich danych z bufora do klienta. Użyj tego, aby zapobiec utracie danych przed zamknięciem połączenia.
Dobre praktyki:
- Używaj
#[try_send]do przesyłania danych strumieniowych, aby uniknąć awarii przy przerwanych połączeniach. - Używaj
#[send], gdy dostarczenie danych jest obowiązkowe. - Zawsze czyść bufor przed zamknięciem połączenia.
- Sprawdzaj
stream.is_keep_alive()w fazie epilogue, aby zarządzać ponownym wykorzystaniem połączenia. - Używaj tych makr dla Server-Sent Events (SSE), aby przesyłać aktualizacje w czasie rzeczywistym.
- Obsługuj wszystkie błędy
sendiflush, aby zapobiec awariom systemu.
Narzędzia te zapewniają precyzyjną kontrolę nad przepływem danych i czasem odpowiedzi.
Źródło: https://dev.to/tengxgfyrz67s/prologue-and-epilogue-macros-1n29 Kod projektu: https://github.com/hyperlane-dev/hyperlane