uhttpc alternatives and similar packages
Based on the "Networking" category.
Alternatively, view uhttpc alternatives based on common mentions on social networks and blogs.
-
call-haskell-from-anything
Call Haskell functions from any programming language via serialization and dynamic libraries -
PortFusion
Haskell-powered cross-platform transport-layer distributed reverse / forward proxy & tunneling solution – currently available for all TCP protocols (RDP, VNC, HTTP(S), SSH, ...). -
ngx-export
A comprehensive web framework aimed at building custom Haskell handlers for the Nginx Web Server
InfluxDB - Power Real-Time Data Analytics at Scale
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of uhttpc or a related 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] <url>
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 ms
For comparison, 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 requests
finished 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 data
Another 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 ms
client 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 ms
client 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 ms
client 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 ms
client 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 ms
client 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 ms
client 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 ms
client 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 ms
finished 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 ms
The --csv
option allows to export the raw measurement data in format
suitable for offline analysis with statistical tools such as R
.