Hyperlane의 Prologue 및 Epilogue 매크로

미들웨어는 Hyperlane 요청 처리의 중추입니다. 대부분의 사람들은 표준 요청 및 응답 미들웨어를 사용합니다. 하지만 Hyperlane은 추가적인 제어를 위해 특화된 prologue 및 epilogue 매크로를 제공합니다.

이 매크로들은 요청 라이프사이클의 맨 시작과 맨 끝에서 실행됩니다. 이를 통해 데이터가 클라이언트에 도달하는 시점을 정확하게 제어할 수 있습니다.

요청 라이프사이클:

• 요청 도착: 서버가 HTTP 요청을 수신합니다. • Prologue 단계: 헤더나 상태 코드와 같은 초기 데이터를 전송합니다. • 미들웨어 체인: 함수들이 요청을 처리합니다. • 라우트 핸들러: 시스템이 응답을 생성합니다. • 응답 미들웨어: 함수들이 응답을 처리합니다. • Epilogue 단계: 최종 데이터가 클라이언트로 플러시(flush)되고 연결이 종료됩니다.

2단계와 6단계를 관리하려면 이 매크로들을 사용하세요.

Send 매크로:

중요하지 않은 데이터에는 #[try_send]를 사용하세요. 연결이 끊어지더라도 시스템이 중단되지 않고 오류를 처리합니다. 이는 데이터 한 조각을 놓쳐도 괜찮은 스트리밍 방식에 적합합니다.

중요한 데이터에는 #[send]를 사용하세요. 이를 통해 데이터가 반드시 전송되도록 보장합니다.

Flush 매크로:

버퍼를 비우려고 시도하고 오류를 유연하게 처리하려면 #[try_flush]를 사용하세요.

버퍼링된 모든 데이터를 클라이언트로 강제 전송하려면 #[flush]를 사용하세요. 연결을 종료하기 전에 데이터 손실을 방지하기 위해 이 매크로를 사용합니다.

Best Practices:

  • 끊긴 연결에서 크래시가 발생하는 것을 방지하기 위해 스트리밍 데이터에는 #[try_send]를 사용하세요.
  • 데이터 전달이 필수적인 경우에는 #[send]를 사용하세요.
  • 연결을 종료하기 전에 항상 버퍼를 플러시하세요.
  • 연결 재사용을 관리하려면 epilogue에서 stream.is_keep_alive()를 확인하세요.
  • 실시간 업데이트를 푸시하기 위해 Server-Sent Events (SSE)에 이 매크로들을 사용하세요.
  • 시스템 장애를 방지하기 위해 모든 send 및 flush 오류를 처리하세요.

이 도구들을 사용하면 데이터 흐름과 응답 타이밍을 정밀하게 제어할 수 있습니다.

Source: https://dev.to/tengxgfyrz67s/prologue-and-epilogue-macros-1n29 Project Code: https://github.com/hyperlane-dev/hyperlane