#grpc
#grpc
Вопрос:
Я просматривал документы grpc и обнаружил, что на стороне сервера вы можете устанавливать метаданные как в форме headers
, так и trailers
. Заголовки кажутся обычной заменой обычных HTTP-заголовков с сопоставлением ключ-значение. Я больше не вижу необходимости в трейлерах, кажется, заголовок служит примерно той же цели, или я что-то здесь упускаю?
Ответ №1:
Трейлеры могут использоваться для всего, что сервер желает отправить клиенту после обработки запроса. Обычно это должно использоваться для информации, общей для всех методов, предоставляемых сервисом, например, данных о нагрузке, созданной RPC для целей метрик.
Комментарии:
1. но использование заголовков могло бы сделать то же самое правильно? существуют ли какие-либо специальные цели или это просто какое-то удобство именования или использования
2. Для потоковой передачи RPC информация о загрузке может быть вычислена только после передачи результатов обратно клиенту, поэтому заголовки в этом случае использовать нельзя.
3. почему его нельзя использовать? это потому, что потоковая передача должна поддерживать свой заголовок во время выполнения потока? я не собирался углубляться в потоковое RPC
4. Заголовки могут быть отправлены только в начале RPC (перед любыми данными), а трейлеры отправляются в конце (после всех данных).
Ответ №2:
gRPC использует HTTP-трейлеры для двух целей.
- он отправляет свой конечный статус (grpc-status) в качестве заголовка трейлера после отправки содержимого.
- Когда во время RPC возникает ошибка приложения или среды выполнения, статус и сообщение о состоянии доставляются в трейлерах.
- Для ответов конец потока обозначается наличием флага END_STREAM в последнем полученном фрейме ЗАГОЛОВКОВ, который содержит трейлеры
- Вторая причина заключается в поддержке вариантов использования потоковой передачи. Эти варианты использования выполняются намного дольше, чем обычные HTTP-запросы. HTTP-трейлер используется для предоставления результата последующей обработки запроса или ответа. Например, если во время обработки потоковых данных возникает ошибка, вы можете отправить код ошибки, используя трейлер, что невозможно с заголовком перед телом сообщения.