Java netty:启用保持活动状态时,http文件示例无法与apache bench一起工作
测试中的http文件示例: 我用netty-4.1.0.beta8编译了上面的示例Java netty:启用保持活动状态时,http文件示例无法与apache bench一起工作,java,http,netty,keep-alive,Java,Http,Netty,Keep Alive,测试中的http文件示例: 我用netty-4.1.0.beta8编译了上面的示例 My test result: $ ab -k -n 2 -c 1 -v 6 http://127.0.0.1:8080/test.sh This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Lice
My test result:
$ ab -k -n 2 -c 1 -v 6 http://127.0.0.1:8080/test.sh
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)...INFO: POST header ==
---
GET /test.sh HTTP/1.0
Connection: Keep-Alive
Host: 127.0.0.1:8080
User-Agent: ApacheBench/2.3
Accept: */*
---
LOG: header received:
HTTP/1.1 200 OK
content-length: 462
content-type: application/octet-stream
date: Fri, 26 Feb 2016 06:34:52 GMT
expires: Fri, 26 Feb 2016 06:35:52 GMT
cache-control: private, max-age=60
last-modified: Fri, 19 Feb 2016 02:35:40 GMT
connection: keep-alive
LOG: Response code = 200
LOG: header received:
**MY TEST.SH CONTENT**
WARNING: Response code not 2xx (500)
apr_poll: The timeout specified has expired (70007)
Total of 1 requests completed
我的测试结果:
$ab-k-n2-c1-v6http://127.0.0.1:8080/test.sh
这是ApacheBench,版本2.3
版权1996亚当·特维斯,宙斯科技有限公司,http://www.zeustech.net/
授权给Apache软件基金会,http://www.apache.org/
基准测试127.0.0.1(耐心等待)…信息:帖子标题==
---
GET/test.sh HTTP/1.0
连接:保持活力
主持人:127.0.0.1:8080
用户代理:ApacheBench/2.3
接受:*/*
---
日志:收到的标题:
HTTP/1.1200ok
内容长度:462
内容类型:应用程序/八位字节流
日期:2016年2月26日星期五06:34:52 GMT
到期时间:2016年2月26日星期五06:35:52 GMT
缓存控制:专用,最大使用年限=60
最后修改:2016年2月19日星期五02:35:40 GMT
连接:保持活力
日志:响应代码=200
日志:收到的标题:
**我的TEST.SH内容**
警告:响应代码不是2xx(500)
apr_轮询:指定的超时已过期(70007)
共完成1项申请
似乎我的test.sh内容被认为是第二个请求的头
我的进一步测试:
$ ab -k -n 1 -c 1 -v 6 http://127.0.0.1:8080/test.sh
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)...INFO: POST header ==
---
GET /test.sh HTTP/1.0
Connection: Keep-Alive
Host: 127.0.0.1:8080
User-Agent: ApacheBench/2.3
Accept: */*
---
LOG: header received:
HTTP/1.1 200 OK
content-length: 462
content-type: application/octet-stream
date: Fri, 26 Feb 2016 06:39:02 GMT
expires: Fri, 26 Feb 2016 06:40:02 GMT
cache-control: private, max-age=60
last-modified: Fri, 19 Feb 2016 02:35:40 GMT
connection: keep-alive
LOG: Response code = 200
..done
Server Software:
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /test.sh
Document Length: 0 bytes
Concurrency Level: 1
Time taken for tests: 0.005 seconds
Complete requests: 1
Failed requests: 0
Write errors: 0
Keep-Alive requests: 1
Total transferred: 263 bytes
HTML transferred: 0 bytes
Requests per second: 209.25 [#/sec] (mean)
Time per request: 4.779 [ms] (mean)
Time per request: 4.779 [ms] (mean, across all concurrent requests)
Transfer rate: 53.74 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 5 5 0.0 5 5
Waiting: 5 5 0.0 5 5
Total: 5 5 0.0 5 5
$ab-k-n1-c1-v6http://127.0.0.1:8080/test.sh
这是ApacheBench,版本2.3
版权1996亚当·特维斯,宙斯科技有限公司,http://www.zeustech.net/
授权给Apache软件基金会,http://www.apache.org/
基准测试127.0.0.1(耐心等待)…信息:帖子标题==
---
GET/test.sh HTTP/1.0
连接:保持活力
主持人:127.0.0.1:8080
用户代理:ApacheBench/2.3
接受:*/*
---
日志:收到的标题:
HTTP/1.1200ok
内容长度:462
内容类型:应用程序/八位字节流
日期:2016年2月26日星期五06:39:02 GMT
到期时间:2016年2月26日星期五06:40:02 GMT
缓存控制:专用,最大使用年限=60
最后修改:2016年2月19日星期五02:35:40 GMT
连接:保持活力
日志:响应代码=200
…完成
服务器软件:
服务器主机名:127.0.0.1
服务器端口:8080
文档路径:/test.sh
文档长度:0字节
并发级别:1
测试所用时间:0.005秒
完成申请:1
失败的请求:0
写入错误:0
保持活动状态请求:1
传输总量:263字节
已传输的HTML:0字节
每秒请求数:209.25[#秒](平均值)
每次请求的时间:4.779[ms](平均值)
每个请求的时间:4.779[ms](所有并发请求的平均时间)
传输速率:接收到53.74[千字节/秒]
连接时间(毫秒)
最小平均值[+/-sd]最大中值
连接:0.0.0
处理:50.05
等待时间:50.05
总数:50.05
您可以看到文档长度为0字节
我在www.google.com上运行了类似的命令,效果很好。
你能帮个忙吗?提前感谢。这是ApacheBench中的一个bug ApacheBench没有完全遵循http规范,并且假设头具有一定的大小写。由于netty应用程序返回的头没有ApacheBench期望的字符大小写,因此它假定内容长度的默认值为0字节 HTTP标头字段,包括通用标头(第4.5节), 请求标头(第5.3节)、响应标头(第6.2节)和 实体标题(第7.1节)字段的通用格式与 RFC 822[9]第3.1节中给出的。每个标题字段包括 名称后跟冒号(“:”)和字段值字段名 不区分大小写。字段值前面可以有任意数量的字符 LWS,但首选单个SP。标题字段可以扩展 通过在至少一个SP的每个额外行前面添加多行 或HT。应用程序应该遵循“通用形式”,即已知的形式 或在生成HTTP构造时指示,因为可能存在 一些实现无法接受公共表单之外的任何内容 因为ApacheBench的keep-alive开关强制它假定服务器支持keep-alive,所以它不会检测keep-alive数据包的“缺失”头
但是,如果ApacheBench中有什么问题需要解决,因为它是该应用程序中的一个错误,导致它错过了正确的内容长度。如果删除
-k
,它是否工作?是的。我的服务器在发送每个响应后关闭非活动http连接。在这种情况下,ApacheBench知道它是套接字输入流的末尾。