我有这个Google Dart测试程序:
#import('dart:io');
main() {
var s = new HttpServer();
s.defaultRequestHandler = (HttpRequest req, HttpResponse res) {
res.statusCode = 200;
res.contentLength = 4;
res.outputStream.writeString("sup!!");
res.outputStream.close();
};
s.listen('127.0.0.1', 80);
print('its up!');
}
它适用于Chrome和Firefox,我得到 sup -messages。
但是,只要我尝试使用Apache Bench,它就会挂起(ab
挂起):
Z:\www>ab -n 1 -c 1 "http://127.0.0.1/"
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)...apr_poll: The timeout specified has expired (70007)
您可以通过安装Apache HTTP服务器找到ab
,它将位于bin
文件夹下。
旁注:是否有其他类似于ab
的基准测试工具,我可以使用(并且不会挂起)?
答案 0 :(得分:4)
这可能是contentLength的一个问题。您写了4,但实际内容长度为5.例如,如果ab看到contentLength,它可能会读取4个字符并等待连接关闭。但是,连接可能不会关闭,因为服务器正在等待写入最后一个字符。客户端和服务器都在等待某些事情,导致死锁。