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

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.

主站蜘蛛池模板: 宝鸡市| 思茅市| 衡阳县| 平湖市| 白朗县| 大名县| 建始县| 千阳县| 韩城市| 岫岩| 平遥县| 崇仁县| 洛阳市| 枝江市| 横峰县| 武宁县| 章丘市| 即墨市| 宁乡县| 江阴市| 晋中市| 苗栗县| 盐边县| 象州县| 吉木萨尔县| 四平市| 赤城县| 横山县| 汕尾市| 泉州市| 曲周县| 都江堰市| 莒南县| 土默特右旗| 印江| 北票市| 旺苍县| 偏关县| 九江县| 达尔| 襄樊市|