Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java netty:启用保持活动状态时,http文件示例无法与apache bench一起工作_Java_Http_Netty_Keep Alive - Fatal编程技术网

Java netty:启用保持活动状态时,http文件示例无法与apache bench一起工作

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

测试中的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/
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知道它是套接字输入流的末尾。