在用Netty编写的HTTP反向代理中,如何确定为单个HTTP请求(标头+任何主体内容)读取的字节数或为单个HTTP响应写入的字节数? Netty如何开箱即用HTTPRequestDecoder
和HTTPResponseEncoder
(或超类)将此信息提供给其他ChannelHandler
?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.
一旦请求被完全读取或响应完全由Netty的处理程序写入,我将如何确定需要替代上述形式的计数在输出字符串中的标记?
你可以计算它们。 Netty提供每次读取或写入的读取或写入次数。不清楚你在问什么。 – EJP
@EJP我非常了解Netty内部。在使用Netty现有的HTTP编码器或解码器时,我问,读取或写入的字节数如何提供给我(因为我没有编码Netty的HTTP支持)? –
@EJP你的downvote是不必要的 - 这个问题是可行的,值得回答。在问这个问题之前,我已经做了大量的研究。我会更新它,但要更清楚一点。 –