🚀🚀🚀本篇主要內容
服務器推送
HTTP/2 新增的另一個強大的新功能是,服務器可以對一個客户端請求發送多個響應。 換句話説,除了對最初請求的響應外,服務器還可以向客户端推送額外資源,而無需客户端明確地請求。
數據流優先級
因為一條連接允許多個 streams 在上面發送 frame,那麼在一些場景下面, 還是希望 stream 有優先級,方便對端為不同的請求分配不同的資源。譬如對於一個 Web 站點來説,優先加載重要的資源,而對於一些不那麼重要的圖片啥的,則使用低的優先級。
還可以設置 Stream Dependencies,形成一棵 streams priority tree。假設 Stream A 是 parent,Stream B 和 C 都是它的孩子,B 的 weight 是 4,C 的 weight 是 12,假設現在 A 能分配到所有的資源,那麼後面 B 能分配到的資源只有 C 的 1/3。
流控制
HTTP/2 也支持流控,如果 sender 端發送數據太快,receiver 端可能因為太忙,或者壓力太大,或者只想給特定的 stream 分配資源,receiver 端就可能不想處理這些數據。譬如,如果 client 給 server 請求了一個視屏,但這時候用户暫停觀看了,client 就可能告訴 server 別在發送數據了。
雖然 TCP 也有 flow control,但它僅僅只對一個連接有效果。HTTP/2 在一條連接上面會有多個 streams,有時候, 僅僅只想對一些 stream 進行控制,所以 HTTP/2 單獨提供了流控機制。
gRPC接口類型
gRPC有4種接口類型:
- Unary RPC (一元RPC)
- Server Streaming RPC ( 服務器流式RPC)
- Client Streaming RPC ( 客户端流式RPC)
- Bidirectional Streaming RPC (雙向流式RPC)
對於底層的HTTP/2而言,這些都是數據流Steam, 所説的接口類型是指進行一次gRPC調用的數據通訊流程(或數據流Stream的生命週期)。
1 Unary RPC
最簡單的RPC類型,客户端發送單個請求並返回單個響應。
2 Server Streaming RPC
服務器流式RPC類似於