2017-06-02 29 views
0

我正在嘗試使用netty來實現HTTP/2客戶端。在這個example(93行)他們手動增加streamId並把它放到地圖上。響應時,他們尋找HttpConversionUtil.ExtensionHeaderNames.STREAM_ID頭參數,從而將響應與請求相關聯。HTTP/2客戶端 - 將響應與請求相關聯 - 可以依賴流ID嗎?

我不喜歡自己增加streamId的想法。我可以以某種方式獲得id netty將用於writeAndFlush的請求嗎?

此外,是否需要大量資源才能創建新的流?或者它只是一個標識符?

回答

1

我很確定,在這一刻你不能得到由Netty生成和使用的streamId。另外,我也不喜歡自己增加streamId的想法,但看起來可以用當前的API來做到這一點。

我檢查Netty的來源,發現接下來的事情就:

  1. HttpToHttp2ConnectionHandler用於寫入請求。它有私人方法getStreamId這是用於write方法獲得價值currentStreamId。但是我們沒有任何訪問這個變量的權限。使用另一種方法incrementAndGetNextStreamId。因此,我們只能增加並獲得新的值,但不能獲得當前的值。

這兩個類都標註了註釋@UnstableApi,所以也許這種行爲將來會改變。

下面是一些相關鏈接:

  1. A little bit updated HTTP 2 client example from Netty repository
  2. HTTP/2 Java Client Examples
  3. Why netty http2 server always use odd number for streamId
+0

因此,我決定不依賴streamId並要求服務器端開發人員從請求中讀取特殊的頭文件(例如「X-id」)並將其作爲響應。 – awfun

+0

我認爲,這不是非常重要,但也不太好。主要缺點是現在所有的API客戶端都必須記住,他們應該在請求中提供'X-Id'並從響應中獲得它。但是,對於高併發API也許可以,因爲即使使用HTTP/1.1,它也可以工作。 – berserkk

+0

是的,這是一個具體項目的臨時解決方案,但我發現沒有辦法更好地實施它 – awfun

相關問題