2016-07-24 6 views
2

Nettyで書かれたHTTPリバースプロキシでは、単一のHTTP要求(ヘッダーと任意の本文の内容)または単一のHTTP応答のために書き込まれたバイト数はどのようにして決定されますか?この情報を他のChannelHandlerで利用できるようにするには、HTTPRequestDecoderHTTPResponseEncoder(またはスーパークラス)のNettyをどのようにして入手できますか?Netty:単一のHTTP要求または応答のバイト数?

ChannelHandlerをパイプラインの先頭に貼り付けるのは簡単ですが、チャンネルの書き込みと読み取りの合計バイト数は記録されますが、私はそれを望ましくありません。読み書きのバイト数を知りたい要求ごとおよび応答ごとに。 NettyのHTTPエンコーダとデコーダは、読み書きを行うものなので、私は何かをサブクラス化して読み書きロジックにフックインさせることで、エンコードまたはデコードされたメッセージごとのカウントを得ることができます。これは可能ですか?

表す要求/応答サイズが同様にHTTP拡張アクセスログ形式をサポートするようにヒストグラムと、このデータは重要です:

http://httpd.apache.org/docs/current/mod/mod_log_config.html

そのページから、単一の要求をログに記録する際に使用されるアクセスログのフォーマット文字列トークン/応答ペア:

%I Bytes received, including request and headers. Cannot be zero. You need to enable mod_logio to use this. 
%O Bytes sent, including headers. May be zero in rare cases such as when a request is aborted before a response is sent. You need to enable mod_logio to use this. 
%S Bytes transferred (received and sent), including request and headers, cannot be zero. This is the combination of %I and %O. You need to enable mod_logio to use this. 

要求が完全に読み込まれるか、応答が完全に網状ハンドラによって書き込まれると、どのように、上記フォームを置換するのに必要な数を決定するであろう出力文字列のトークンで?

+0

あなたはそれらを数えます。 Nettyは、読み取りまたは書き込みごとに読み取りまたは書き込みのカウントを提供します。あなたが何を求めているのか不明です。 – EJP

+0

@EJP私はNettyの内部をよく知っています。私は、Nettyの既存のHTTPエンコーダまたはデコーダを使用しているときに、NettyのHTTPサポートを記述していないので、読み込みまたは書き込みバイト数をどのように利用できるのかを尋ねています。 –

+0

@EJPあなたのdownvoteは不必要でした - 質問は実行可能で、答えにふさわしいです。私は質問をする前に、たくさんの研究をしました。私はそれをもう少し明確にするためにそれを更新します。 –

答えて

1

NetTYは、HttpRequest/HttpResponse/HttpContentの「解析済み」表現をパイプラインの次のハンドラに渡すため、これらの情報を取得する方法は現在ありません。たとえば、ヘッダなどの各文字を数えるなど、自分で数学を行う必要があります。

+0

お返事ありがとうございます!あなたは、この機能を追加したプルリクエストを開いて、これを 'HttpObject'インターフェースへの2つの新しい追加として表現しますか? (例えば、 'readBytes()'と 'byteCount()'、前者は読み込みに必要な総数、後者はインスタンスで実際に表現されたバイト数です)?思考? –

+0

議論する問題を開いてください...私たちはインターフェイスを壊すことなくこれを行うことはできないと言っています。 –

+0

@LesHazlewood私は現在、Nettyのアクセスログライターと同じ状況に直面しています。レスポンスの大きさに手を差し伸べる方法がわからない。結局これをどのように解決しましたか? –

関連する問題