https://github.com/haskell-hvr/uhttpc
`uhttpc` - µHTTP client library
https://github.com/haskell-hvr/uhttpc
Last synced: 7 months ago
JSON representation
`uhttpc` - µHTTP client library
- Host: GitHub
- URL: https://github.com/haskell-hvr/uhttpc
- Owner: haskell-hvr
- License: gpl-3.0
- Created: 2013-04-01T19:41:47.000Z (about 12 years ago)
- Default Branch: master
- Last Pushed: 2019-05-29T22:32:35.000Z (about 6 years ago)
- Last Synced: 2024-03-15T14:49:28.859Z (over 1 year ago)
- Language: Haskell
- Homepage: http://hackage.haskell.org/package/uhttpc
- Size: 58.6 KB
- Stars: 27
- Watchers: 5
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# `uhttpc` - µHTTP client library
`uhttpc` is a simple low-level and lightweight Haskell HTTP 1.1
library providing the bare minimum required for HTTP benchmarking
purposes.This is **not** a RFC compliant HTTP client library and **shall not**
be used as a general purpose HTTP implementation!# `uhttpc-bench`
This Cabal package comes with an executable `uhttpc-bench` which
represents an `ab`/`weighttpd`-style HTTP benchmarking tool:uhttpc-bench - a Haskell-based ab/weighttp-style webserver benchmarking tool
Simple HTTP benchmark tool similiar to ab and weighttp
uttpc-bench [OPTIONS]
Common flags:
-n=num number of requests (default: 1)
-t=num threadcount (default: 1)
-c=num concurrent clients (default: 1)
-k enable keep alive
--csv=FILE dump request timings as CSV (RFC4180) file
--user-agent=ITEM specify User-Agent (default: "httpc-bench")
-H=str add header to request
-v --verbose enable more verbose statistics and output
--no-stats disable statistics
-p=FILE perform POST request with file-content as body
-l=FILE perform a POST request per line, no quoting,
round-robin, each client independently
-? --help Display help message
-V --version Print version information# How to use it
First, install the `uhttpc` package
(This requires GHC 7.6.x or later)$ cabal install uhttpc
A simple example invocation:
$ uhttpc-bench -n 100000 -t1 -c3 -k http://localhost/
uhttpc-bench - a Haskell-based ab/weighttp-style webserver benchmarking tool
starting benchmark...
finished in 2.314289 seconds, 100000 reqs (3 conns), 43209.8 req/s received
status codes: 100000 HTTP-200
data received: 36205.098 KiB/s, 85800000 bytes total (24600000 bytes http + 61200000 bytes content)
rtt min/avg/max = 0.034/0.068/4.252 msFor comparison, [`weighttp`](https://github.com/lighttpd/weighttp) can be invoked with the very same arguments (in this case at least):
$ weighttp -n 100000 -t1 -c3 -k http://localhost/
weighttp - a lightweight and simple webserver benchmarking tool
starting benchmark...
spawning thread #1: 3 concurrent requests, 100000 total requestsfinished in 2 sec, 333 millisec and 421 microsec, 42855 req/s, 35908 kbyte/s
requests: 100000 total, 100000 started, 100000 done, 100000 succeeded, 0 failed, 0 errored
status codes: 100000 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 85800000 bytes total, 24600000 bytes http, 61200000 bytes dataAnother example invocation of `uhttpc-bench`:
$ uhttpc-bench http://www.google.com/ -v -c8 -n1000
uhttpc-bench - a Haskell-based ab/weighttp-style webserver benchmarking tool
using 88-byte request header (+ 0-byte body):
"GET / HTTP/1.1\r\nHost: www.google.com:80\r\nUser-Agent: uhttpc-bench\r\nConnection: close\r\n\r\n"starting benchmark...
per-client stats:
client spawned +0.000008 s, 125 reqs (125 conns), 8.1 req/s, finished in 15.369619 s
rtt min/avg/med/max = 99.586/122.902/122.109/167.193 msclient spawned +0.000258 s, 125 reqs (125 conns), 8.1 req/s, finished in 15.383278 s
rtt min/avg/med/max = 100.494/123.012/121.648/184.555 msclient spawned +0.000292 s, 125 reqs (125 conns), 8.1 req/s, finished in 15.365843 s
rtt min/avg/med/max = 98.721/122.872/121.668/163.810 msclient spawned +0.000327 s, 124 reqs (124 conns), 8.1 req/s, finished in 15.346788 s
rtt min/avg/med/max = 103.008/123.709/122.834/174.003 msclient spawned +0.000366 s, 126 reqs (126 conns), 8.2 req/s, finished in 15.367205 s
rtt min/avg/med/max = 95.255/121.907/120.736/152.943 msclient spawned +0.000403 s, 124 reqs (124 conns), 8.1 req/s, finished in 15.357957 s
rtt min/avg/med/max = 97.730/123.800/123.569/162.326 msclient spawned +0.000434 s, 125 reqs (125 conns), 8.1 req/s, finished in 15.388717 s
rtt min/avg/med/max = 103.056/123.055/121.961/162.419 msclient spawned +0.000461 s, 126 reqs (126 conns), 8.2 req/s, finished in 15.394365 s
rtt min/avg/med/max = 102.114/122.123/121.289/151.520 msfinished in 15.394867 seconds, 1000 reqs (1000 conns), 65.0 req/s received
status codes: 1000 HTTP-302
data received: 63.498 KiB/s, 1001000 bytes total (783000 bytes http + 218000 bytes content)
rtt 2/9|25/50/75|91/98-th quantile = 103.737/108.696 | 115.124/121.688/129.944 | 137.715/148.159 ms
rtt min/avg/max = 95.255/122.919/184.555 msThe `--csv` option allows to export the raw measurement data in format
suitable for offline analysis with statistical tools such as [`R`](http://www.r-project.org).