![](/img/trans.png)
[英]I am unable to update Flow control window in HTTP2 implementation, so the client is unable to send the rest of the data
[英]Flow Control questions about HTTP/2 RFC Implementation
我正在構建一個http / 2客戶端,我對rfc以及如何處理實現有疑問,特別是在流量控制方面。
我知道流量控制使用基於信用的窗口大小系統,但我對如何處理耗盡窗口的情況有點不確定。
我是否只是無限期地阻塞,直到WINDOW_UPDATE幀釋放了什么? 或者合理的超時是什么?
當窗口耗盡時,我暫停發送所有幀嗎? RFC規定流中幀的順序是重要的,特別是對於報頭和數據幀,但它沒有明確聲明在窗口耗盡時應暫停所有幀。 這對我來說有點模棱兩可,因為數據幀是唯一可以計算窗口大小的數據幀。 那么我應該阻止發送所有幀或只是標題/數據? 這個答案對於連接流控制上下文與流流控制上下文有什么不同?
連接中的所有數據幀都有一個流控制窗口,然后每個流都有一個流控制窗口。
1.-如果連接窗口耗盡,則暫停發送任何流的DATA幀,直到獲得WINDOWS_UPDATE。 您可以實現超時。 如果超時到期,您唯一的補救措施是關閉連接並重試。
2.-如果流連接窗口耗盡,則僅暫停該流。
在所有情況下,您只暫停DATA幀。 其他類型的幀不受流量控制的影響。
如果您正在實現客戶端而不是服務器,則您更關心自己發送WINDOW_UPDATE幀。 除非你做了很多POST和PUT,即將數據發送到服務器。
根據我作為HTTP / 2服務器開發人員的經驗,我發現在我稱之為“train”的組中管理HTTP / 2幀非常方便。 對於除HEADERS,PUSH_PROMISE和CONTINUATION之外的所有幀,列車僅由幀組成。 對於HEADERS和PUSH_PROMISE,列車由該幀和任何后續的CONTINUATION幀組成。 然后將列車置於具有以下級別的優先級隊列中(首先具有最高優先級):
每當通道可用於發送時,您將在優先級隊列中發送優先級最高的列車。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.