在使用Netty编写的HTTP反向代理中,如何确定单个HTTP请求(标头+任何正文内容)或为单个HTTP响应编写的字节数? Netty如何开箱即用HTTPRequestDecoder
和HTTPResponseEncoder
(或超类),以便将这些信息提供给其他ChannelHandler
?
我知道很容易在管道的开头粘贴一个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处理程序完全写入响应,我如何确定在输出字符串中替换上述格式标记所需的计数?
答案 0 :(得分:1)
目前无法获取这些信息,因为Netty只将HttpRequest / HttpResponse / HttpContent的“已解析”表示传递给管道中的下一个处理程序。您需要自己进行数学计算,例如计算标题中的每个字符等。