如何统计servlet一次访问对带宽流量的占用

如何统计servlet一次request和response所占用的实现带宽大小?

这里所指大小,是通过网络传输的实际流量,不是java对象的大小。

包括http的头、体、Cookie等所有经过网络的数据。

 

方法有:

1、直接读取http header中的Content-Length头,可以得到body的大小,再加上header的大小即可。

但有时,头中没有Content-Length;而Response在commit之前,也很难得到真正的大小。

2、包装request和response,在使用inputstream、outputstream时,记录下字节大小,同时也需要计算头的大小,而流中的数据也是未经过压缩的(header中可能指定压缩)

3、深入到容器,如Tomcat,它的HttpServletRequest是RequestFacade实例,其中包装了org.apache.catalina.connector.Request,而最底层是org.apache.coyote.Request类,来负责Tomcat的请求处理,其中org.apache.coyote.Request.getBytesRead()方法,可以得到实际读取的字节大小。header的大小,可以通过计算得到,也可以深入到org.apache.coyote.Request的inputBuffer中的end得到,这样可以精确计算出Request占用带宽大小。同理,也可以通过org.apache.catalina.connector.Response.getBytesWritten(boolean)得到response的体大小,头大小还是要算,但基本上能够精确得出。

但是,如果在代码中使用tomcat的类,就与容器绑定,不是很好的设计,通过反射实现,也是一种选择。

 

另外,求出的字节大小,真正的bandwidth还是要乘上系数的,因为数据在网络上传输要经过层层包装,添加检验信息等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值