|
|
пре 6 година | |
|---|---|---|
| base | пре 6 година | |
| cert | пре 6 година | |
| consul | пре 6 година | |
| crc | пре 6 година | |
| echo-servers | пре 6 година | |
| etc | пре 6 година | |
| event | пре 6 година | |
| examples | пре 6 година | |
| html | пре 6 година | |
| http | пре 6 година | |
| misc | пре 6 година | |
| protocol | пре 6 година | |
| scripts | пре 6 година | |
| sqlite | пре 6 година | |
| unittest | пре 6 година | |
| utils | пре 6 година | |
| winbuild | пре 6 година | |
| .clang-format | пре 6 година | |
| .gitignore | пре 6 година | |
| .travis.yml | пре 6 година | |
| LICENSE | пре 6 година | |
| Makefile | пре 6 година | |
| Makefile.in | пре 6 година | |
| Makefile.vars | пре 6 година | |
| README.md | пре 6 година | |
| configure | пре 6 година | |
| hconfig.h | пре 6 година | |
| hv.h | пре 6 година | |
| main.cpp.tmpl | пре 6 година |
Like libevent, libev, and libuv,
libhv provides event-loop with non-blocking IO and timer,
but simpler apis and richer protocols.
see examples/httpd.cpp
#include "HttpServer.h"
int http_api_hello(HttpRequest* req, HttpResponse* res) {
res->body = "hello";
return 0;
}
int main() {
HttpService service;
service.base_url = "/v1/api";
service.AddApi("/hello", HTTP_GET, http_api_hello);
http_server_t server;
server.port = 8080;
server.worker_processes = 4;
server.service = &service;
http_server_run(&server);
return 0;
}
git clone https://github.com/ithewei/libhv.git
cd libhv
make httpd curl
bin/httpd -s restart -d
ps aux | grep httpd
# http web service
bin/curl -v localhost:8080
# http indexof service
bin/curl -v localhost:8080/downloads/
# http api service
bin/curl -v -X POST localhost:8080/v1/api/json -H "Content-Type:application/json" -d '{"user":"admin","pswd":"123456"}'
# webbench (linux only)
make webbench
bin/webbench -c 2 -t 60 localhost:8080
libhv(port:8080) vs nginx(port:80)

see examples/tcp.c examples/udp.c
// TCP echo server
#include "hloop.h"
void on_close(hio_t* io) {
}
void on_recv(hio_t* io, void* buf, int readbytes) {
hio_write(io, buf, readbytes);
}
void on_accept(hio_t* io) {
hio_setcb_close(io, on_close);
hio_setcb_read(io, on_recv);
hio_read(io);
}
int main(int argc, char** argv) {
if (argc < 2) {
printf("Usage: cmd port\n");
return -10;
}
int port = atoi(argv[1]);
hloop_t* loop = hloop_new(0);
hio_t* listenio = create_tcp_server(loop, "0.0.0.0", port, on_accept);
if (listenio == NULL) {
return -20;
}
hloop_run(loop);
hloop_free(&loop);
return 0;
}
make tcp udp nc
bin/tcp 1111
bin/nc 127.0.0.1 1111
bin/udp 2222
bin/nc -u 127.0.0.1 2222
make libhv
make webbench
# ubuntu16.04
sudo apt-get install libevent-dev libev-dev libuv1-dev libboost-dev libasio-dev libpoco-dev
# muduo install => https://github.com/chenshuo/muduo.git
make echo-servers
sudo echo-servers/benchmark.sh
Note: The client and servers are located in the same computer, the results are random, for reference only. In general, the performance of these libraries are similar, each has its own advantages.
739352073,欢迎加群讨论