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 send i flush, 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