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

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.

主站蜘蛛池模板: 南昌市| 珠海市| 滦南县| 昂仁县| 务川| 临西县| 庆安县| 牡丹江市| 定陶县| 扎赉特旗| 贡觉县| 内黄县| 忻州市| 施甸县| 玉环县| 霸州市| 宜城市| 湖南省| 勃利县| 孝感市| 苏尼特左旗| 苍梧县| 介休市| 油尖旺区| 得荣县| 金山区| 惠来县| 井陉县| 安溪县| 台州市| 奇台县| 卢湾区| 陈巴尔虎旗| 襄樊市| 平原县| 西峡县| 莒南县| 新野县| 宝山区| 南涧| 河北省|