簡體   English   中英

HTTP2:如何實現流量控制功能?

[英]HTTP2: How to implement flow control feature?

我正在研究 http2 的一些功能,其中之一是流量控制,想了解如何實現它

如果可以,給我一個例子或演示。 謝謝。

我在Jetty (一個 Java HTTP 和 WebSocket 服務器)中實現了 HTTP/2,所以我可以向你指出它是如何在 Jetty 中實現的——但你可以看看其他實現 HTTP/2 的開源項目,看看他們是如何做的它。

Jetty 實現基於類FlowControlStrategy

有兩種實現方式,一種是簡單的 (SimpleFlowControlStrategy),另一種是更高效的 (BufferingFlowControlStrategy)。

在這兩種情況下, FlowControlStrategy 從 HTTP/2 實現接收事件,特別是:

  1. 當一個 DATA 幀被發送到另一個對等方時
  2. 當從另一個對等方接收到 WINDOW_UPDATE 幀時
  3. 當從另一個對等方接收到數據幀時
  4. 當應用程序使用接收到的數據時

如果數據發送到另一個對等點,“發送”流量控制窗口減少; 當從另一個對等方接收到 WINDOW_UPDATE 幀時,“發送”流控制窗口會增加。

類似地,當接收到數據時,“接收”流控制窗口減小; 當應用程序使用接收到的數據時,“接收”流控制窗口會增加 - 並且可能會向其他對等方發送 WINDOW_UPDATE 幀以表示它可以發送更多數據。

HTTP/2 實現需要檢查這兩個流控窗口,並在“發送”流控窗口達到零(或負)時停止發送數據; 如果在“接收”流控制窗口為零(或負)時接收到數據,則連接失敗。 收到 WINDOW_UPDATE 幀后,HTTP/2 實現需要恢復發送數據。

這是如何在 HTTP/2 中實現流量控制的基礎。 根據所使用的技術和實現細節,還有很多事情需要處理,例如數據排隊、數據復制、線程安全等。但是您可以在編寫實現時解決這些問題。

玩得開心!

暫無
暫無

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

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