官术网_书友最值得收藏!

Load testing

It is good to know the limits of an application long before you ever reach them. The HttpClientRequest function can be used to create requests to the blog server, and the HttpClientResponse function can be used to receive incoming data from the blog server.

The statusCode property will be checked to ensure that the page request was successfully handled by the server.

Building a simple load tool

A simple benchmark for the blog server would be the time taken to serve 1000 files. The getUrl method triggers the actual request with the first then clause, closing the request to the server. The following then clause handles the actual response from the server.

This method can be used to monitor a live website and perhaps trigger a notification if a status other than HttpStatus.OK is received:

import 'dart:io';

main() {
  print("Starting...");

  var url = "http://127.0.0.1:8080/index.html";
  var hc = new HttpClient();
  var watch = new Stopwatch();
  int attemptedRequests = 1000;

  print("Starting testing...");
  watch.start();

  for (int i=0;i<attemptedRequests;i++)
  {
    hc.getUrl(Uri.parse(url))
      .then((HttpClientRequest request) => request.close())
      .then((HttpClientResponse response) {
        if (response.statusCode==HttpStatus.OK)
          print("$i, ${response.statusCode}, ${watch.elapsed.inMilliseconds}");
      });
  }
}

The Stopwatch class can be used to measure the time taken and reported to standard output via a print statement. As the responses arrive asynchronously, the status is printed after each response. The request number, status code, and elapsed time are printed with a comma between each value, so that the data can easily be manipulated in a spreadsheet application.

Try putting a print statement directly after the loop has finished and you will see the print run before the first response is received from the server (or soon after).

On my modest Linux laptop, the server was able to serve index.html 2000 times in 3.8 seconds—not too bad! Try experimenting with the request number; however, you are likely to hit a limit on open files, as this simple benchmark fires many simultaneous requests.

主站蜘蛛池模板: 祁门县| 渝北区| 和田市| 大田县| 永新县| 贡嘎县| 招远市| 托里县| 志丹县| 右玉县| 平罗县| 蓬莱市| 德化县| 新沂市| 汝阳县| 嵊州市| 乾安县| 金乡县| 新安县| 堆龙德庆县| 扬州市| 綦江县| 富锦市| 达拉特旗| 商都县| 兰坪| 奉新县| 普兰店市| 红河县| 萝北县| 叙永县| 天镇县| 平乡县| 抚远县| 根河市| 荔浦县| 阿尔山市| 南平市| 龙南县| 清水河县| 聂荣县|