簡體   English   中英

HTTP/2 客戶端可以通過在雙向流 RPC 中發送 HEADER 幀來終止流嗎?

[英]Can HTTP/2 client terminate the stream by sending a HEADER frame in bidirectional streaming RPC?

假設我們有一個雙向流式 RPC,其中客戶端正在發送多個請求消息(即多個 DATA 幀),而服務器正在用多個響應消息(即多個 DATA 幀)進行回復。

據我了解,當 RPC 完成時,服務器通常會發送一個帶有狀態標頭的 HEADER 幀,可能還有一些像 grpc-status 和 grpc-message 這樣的尾部標頭來標記請求/響應交換的完成。

我的問題是,假設服務器發送了錯誤的響應消息,客戶端是否可以發送帶有 grpc-status 和 grpc-message 標頭的 HEADER 幀來傳達有關錯誤的信息。

我問的原因是因為在 C++ 服務器代碼(從 protobuf 定義生成)中,我正在努力尋找一種方法來獲取客戶端發送的最后一個 HEADER 幀以驗證 grpc 的值-狀態和 grpc 消息標頭。

另外,經過grpc項目中的單元測試,似乎只有服務器返回RPC的狀態,這更令人懷疑。

然而,我能夠從客戶端發送 HEADER 幀,但基於上述內容,即使我能夠做到,我也不確定這是否是正確的行為。

如果有人能為我澄清這一點,我將不勝感激,因為我對 HTTP/2 和 gRPC 還很陌生。

另外,經過grpc項目中的單元測試,似乎只有服務器返回RPC的狀態,這更令人懷疑。

正確的! 在 gRPC 中,服務器負責使用狀態和可選的尾隨元數據終止 RPC。 客戶端從不向服務器發送狀態。 客戶端可以在沒有狀態的情況下指示它已完成在流上的發送(這在內部通過發送一個帶有 END_STREAM 標志的空數據幀發生,但用戶不需要關心這個細節)。 客戶端僅在 RPC 開始時發送 HEADER 幀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM