2017-06-02 7 views
0

nettyを使用してHTTP/2クライアントを実装しようとしています。このexample(93行目)では、手動でstreamIdをインクリメントしてマップに配置します。応答が来るとき、彼らはHttpConversionUtil.ExtensionHeaderNames.STREAM_IDヘッダーパラメータを探し、したがって応答と要求を関連づけます。HTTP/2クライアント - 要求への応答を関連付ける - ストリームIDに頼ることができますか?

自分でstreamIdを増やす考えが嫌いです。どういうわけかIDネチェットを利用してwriteAndFlushにリクエストしてもらえますか?

また、新しいストリームを作成するのに多くのリソースが必要ですか?それとも単なる識別子ですか?

答えて

1

この時点では、streamIdが生成され、Nettyによって使用されることはありません。また、自分自身でstreamIdを増やすという考えは嫌いですが、現在のAPIでこれを行うのは大丈夫です。

私はネッティーソースを確認し、次のものを見つけた:

  1. HttpToHttp2ConnectionHandlerは、書き込み要求に使用されます。それはの値を得るためにwriteの方法で使用されるプライベートメソッドgetStreamIdを持っています。しかし、この変数へのアクセス権はありません。
  2. getStreamIdでは、incrementAndGetNextStreamIdという別の方法が使用されます。だから、再び、増やすことができ、新しいstreamId値を得ることができますが、現在の値を取得することはできません。

これらのクラスの両方に注釈@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")を読んで、それを応答に入れるようにserveride-developersに依頼しました。 – awfun

+0

私はそれはあまり重要ではないが、あまり良くないと思う。主な欠点は、現在すべてのAPIクライアントは、 'X-Id'をリクエストして応答から取得する必要があることに留意する必要があることです。しかし、これはHTTP/1.1でも機能するので、並行性の高いAPIにとってはおそらく大丈夫です。 – berserkk

+0

これは具体的なプロジェクトのアドホックな解決策ですが、より良い実装方法は見つけられませんでした – awfun

関連する問題