This is a maintenance fork of libuhttpd
 
 
 
Go to file
Jianhui Zhao c28eaa2bb7 Multi-process operation are not directly integrated
The multi-process model is presented as sample code.

Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>
2021-01-09 00:04:50 +08:00
cmake/Modules Use libev instead of libubox 2019-08-31 16:33:08 +08:00
example Multi-process operation are not directly integrated 2021-01-09 00:04:50 +08:00
src Multi-process operation are not directly integrated 2021-01-09 00:04:50 +08:00
.gitignore Improve CMakeLists.txt 2017-12-30 12:24:00 +08:00
.gitmodules http-parser: Use submodule 2020-03-06 13:48:48 +08:00
.travis.yml Fix ci 2019-08-31 16:55:19 +08:00
BUILDOPENWRT.md chmod 644 2018-03-18 10:48:32 +08:00
BUILDOPENWRT_ZH.md chmod 644 2018-03-18 10:48:32 +08:00
CMakeLists.txt CMakeLists.txt: add BUILD_EXAMPLE 2021-01-08 08:01:26 +01:00
CONTRIBUTING.md chmod 644 2018-03-18 10:48:32 +08:00
CONTRIBUTING_ZH.md chmod 644 2018-03-18 10:48:32 +08:00
LICENSE Change the license information 2019-09-03 15:03:35 +08:00
README.md Multi-process operation are not directly integrated 2021-01-09 00:04:50 +08:00
README_ZH.md Multi-process operation are not directly integrated 2021-01-09 00:04:50 +08:00
gen_cert.sh Optimize build for example 2018-01-05 21:46:03 +08:00
openssl.cnf Optimize build for example 2018-01-05 21:46:03 +08:00

README.md

libuhttpd(中文)

license PRs Welcome Issue Welcome Release Version Build Status

A very flexible, lightweight and fully asynchronous HTTP server library based on libev and http-parser for Embedded Linux.

Features

  • Lightweight and fully asynchronous
  • Use libev as its event backend
  • Support HTTPS - OpenSSL, mbedtls and CyaSSl(wolfssl)
  • Support HTTP pipelining
  • Support IPv6
  • Support plugin
  • Support upload large file
  • Support HTTP range requests
  • Support multi-process model - The same multi-process model as Nginx
  • Flexible - you can easily extend your application to have HTTP/HTTPS services
  • Code structure is concise and understandable, also suitable for learning

Dependencies

  • libev - A full-featured and high-performance event loop
  • http-parser - A high performance parser for HTTP messages written in C
  • mbedtls - If you choose mbedtls as your SSL backend
  • wolfssl - If you choose wolfssl as your SSL backend
  • openssl - If you choose openssl as your SSL backend

Benchmark

Nginx

$ wrk -t4 -c400 -d10s http://localhost:80/test.html
Running 10s test @ http://localhost:80/test.html
4 threads and 400 connections
Thread Stats   Avg      Stdev     Max   +/- Stdev
	Latency     3.54ms    7.32ms 224.58ms   93.30%
	Req/Sec    40.63k    12.49k   96.29k    74.50%
1622012 requests in 10.05s, 385.09MB read
Requests/sec: 161390.39
Transfer/sec:     38.32MB

libuhttpd

$ wrk -t4 -c400 -d10s http://localhost:8080/test.html
Running 10s test @ http://localhost:8080/test.html
4 threads and 400 connections
Thread Stats   Avg      Stdev     Max   +/- Stdev
	Latency     2.12ms    3.01ms  31.30ms   89.26%
	Req/Sec    70.87k    12.53k  142.54k    79.75%
2826394 requests in 10.05s, 547.18MB read
Requests/sec: 281328.83
Transfer/sec:     54.46MB

Configure

See which configuration are supported

~/libuhttpd/$ mkdir build && cd build
~/libuhttpd/build$ cmake .. -L
~/libuhttpd/build$ cmake .. -LH

Build and install

~/libuhttpd/build$ make && sudo make install

Run Example

Run

~/libuhttpd/build$ ./example/simple_server -v

Then use the command curl or browser to test

$ curl 'https://127.0.0.1:8000' -v

Install on OpenWrt

opkg update
opkg list | grep libuhttpd
opkg install libuhttpd-nossl

If the install command fails, you can compile it yourself.

Example

Contributing

If you would like to help making libuhttpd better, see the CONTRIBUTING.md file.