一个简单的Dart HTTP服务器挂在Apache Bench上

时间:2012-07-16 16:58:30

标签: http dart apachebench

我有这个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的基准测试工具,我可以使用(并且不会挂起)?

1 个答案:

答案 0 :(得分:4)

这可能是contentLength的一个问题。您写了4,但实际内容长度为5.例如,如果ab看到contentLength,它可能会读取4个字符并等待连接关闭。但是,连接可能不会关闭,因为服务器正在等待写入最后一个字符。客户端和服务器都在等待某些事情,导致死锁。