libhv
Как и libevent, libev
и libuv
, libhv
предоставляет цикл обработки событий с неблокирующим вводом-выводом и таймером, но с более простым API и более богатыми протоколами.
См. BUILD.md.
Makefile:
./configure
make
sudo make install
или cmake:
mkdir build
cd build
cmake ..
cmake --build .
или vcpkg:
vcpkg install libhv
или xmake:
xrepo install libhv
Запустите ./getting_started.sh
:
git clone https://github.com/ithewei/libhv.git
cd libhv
make
bin/httpd -h
bin/httpd -d
#bin/httpd -c etc/httpd.conf -s restart -d
ps aux | grep httpd
# HTTP-файл службы
bin/curl -v localhost:8080
# Служба indexof HTTP
bin/curl -v localhost:8080/downloads/
# Служба API HTTP
bin/curl -v localhost:8080/ping
bin/curl -v localhost:8080/echo -d "hello,world!"
bin/curl -v localhost:8080/query?page_no=1\&page_size=10
bin/curl -v localhost:8080/kv -H "Content-Type:application/x-www-form-urlencoded" -d 'user=admin&pswd=123456'
bin/curl -v localhost:8080/json -H "Content-Type:application/json" -d '{"user":"admin","pswd":"123456"}'
bin/curl -v localhost:8080/form -F "user=admin pswd=123456"
bin/curl -v localhost:8080/upload -F "file=@LICENSE"
bin/curl -v localhost:8080/test -H "Content-Type:application/x-www-form-urlencoded" -d 'bool=1&int=123&float=3.14&string=hello'
bin/curl -v localhost:8080/test -H "Content-Тип:application/json" -d '{"bool":true,"int":123,"float":3.14,"string":"hello"}'
bin/curl -v localhost:8080/test -F 'bool=1 int=123 float=3.14 string=hello'
# RESTful API: /group/:group_name/user/:user_id
bin/curl -v -X DELETE localhost:8080/group/test/user/123
Смотрите examples/http_server_test.cpp:
#include "HttpServer.h"
int main() {
HttpService router;
router.GET("/ping", [](HttpRequest* req, HttpResponse* resp) {
return resp->String("pong");
});
router.GET("/data", [](HttpRequest* req, HttpResponse* resp) {
static char data[] = "0123456789";
return resp->Data(data, 10);
});
router.GET("/paths", [&router](HttpRequest* req, HttpResponse* resp) {
return resp->Json(router.Paths());
});
router.POST("/echo", [](HttpRequest* req, HttpResponse* resp) {
resp->content_type = req->content_type;
resp->body = req->body;
return 200;
});
http_server_t server;
server.port = 8080;
server.service = &router;
http_server_run(&server);
return 0;
}
Смотрите examples/http_client_test.cpp:
#include "requests.h"
int main() {
auto resp = requests::get("http://www.example.com");
if (resp == NULL) {
printf("request failed!\n");
} else {
printf("%d %s\r\n", resp->status_code, resp->status_message());
printf("%s\n", resp->body.c_str());
}
resp = requests::post("127.0.0.1:8080/echo", "hello,world!");
if (resp == NULL) {
printf("request failed!\n");
} else {
printf("%d %s\r\n", resp->status_code, resp->status_message());
printf("%s\n", resp->body.c_str());
}
return 0;
}
# webbench (только для Linux)
make webbench
bin/webbench -c 2 -t 10 http://127.0.0.1:8080/
bin/webbench -k -c 2 -t 10 http://127.0.0.1:8080/
# sudo apt install apache2-utils
ab -c 100 -n 100000
``` **sudo apt install wrk**
wrk -c 100 -t 4 -d 10s http://127.0.0.1:8080/
libhv (порт: 8080) против nginx (порт: 80)
cd echo-servers
./build.sh
./benchmark.sh
Пропускная способность:
libevent работает на порту 2001
libev работает на порту 2002
libuv работает на порту 2003
libhv работает на порту 2004
asio работает на порту 2005
poco работает на порту 2006
==============2001=====================================
[127.0.0.1:2001] 4 потока 1000 подключений работают 10 с
общее количество прочитанных данных = 1616761, прочитано байтов = 1655563264
пропускная способность = 157 МБ/с
==============2002=====================================
[127.0.0.1:2002] 4 потока 1000 подключений работают 10 с
общее количество прочитанных данных = 2153171, прочитано байтов = 2204847104
пропускная способность = 210 МБ/с
==============2003=====================================
[127.0.0.1:2003] 4 потока 1000 подключений работают 10 с
общее количество прочитанных данных = 1599727, прочитано байтов = 1638120448
пропускная способность = 156 МБ/с
==============2004=====================================
[127.0.0.1:2004] 4 потока 1000 подключений работают 10 с
общее количество прочитанных данных = 2202271, прочитано байтов = 2255125504
пропускная способность = 215 МБ/с
==============2005=====================================
[127.0.0.1:2005] 4 потока 1000 подключений работают 10 с
общее количество прочитанных данных = 1354230, прочитано байтов = 1386731520
пропускная способность = 132 МБ/с
==============2006=====================================
[127.0.0.1:2006] 4 потока 1000 подключений работают 10 с
общее количество прочитанных данных = 1699652, прочитано байтов = 1740443648
пропускная способность = 165 МБ/с
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )