GitHub - wlgq2/uv-cpp: libuv wrapper in C++11 /libuv C++11网络库 (original) (raw)

uv-cpp

Github release Platform License Project Status: Active – The project has reached a stable, usable state and is being actively developed. CodeRabbit Pull Request Reviews

Language Translations:


uv-cpp is a simple interface, high-performance network library based on C++11.

Dependencies

Features


Build Instructions


Benchmark

ping-pong VS boost.asio-1.67

environment:Intel Core i5 8265U + debian8 + gcc8.3.0 + libuv1.30.0 + '-O2'

size peer pack 1K bytes 2K bytes 4K bytes 8K bytes
uv-cpp 16138 kbyte 32071 kbyte 59264 kbyte 123813 kbyte
boost.asio 16119 kbyte 31566 kbyte 58322 kbyte 126210 kbyte

asio1

environment:i5-8265U + 4G memory + 4k bytes ping-pong

concurrency 10 100 1000 5000
uv-cpp 654282 kbyte 591869 kbyte 401500 kbyte 412855 kbyte
boost.asio 633818 kbyte 585716 kbyte 371386 kbyte 382402 kbyte

asio2

Apache bench VS nginx-1.14.2

environment:Intel Core i5 8265U + debian8 + gcc8.3.0 + libuv1.30.0 + '-O2'

1000 concurrency && 100000 request.
uv_http nginx_http

Quick start

A simple echo server

#include #include <uv/include/uv11.h>

int main(int argc, char** args) { uv::EventLoop* loop = uv::EventLoop::DefaultLoop();

uv::TcpServer server(loop);
server.setMessageCallback([](uv::TcpConnectionPtr ptr,const char* data, ssize_t size)
{
    ptr->write(data, size, nullptr);
});
//server.setTimeout(60); //heartbeat timeout.

uv::SocketAddr addr("0.0.0.0", 10005, uv::SocketAddr::Ipv4);
server.bindAndListen(addr);
loop->run();

}

A simple http service router which based on radix tree.

int main(int argc, char** args) { uv::EventLoop loop; uv::http::HttpServer::SetBufferMode(uv::GlobalConfig::BufferMode::CycleBuffer);

uv::http::HttpServer server(&loop);

//example:  127.0.0.1:10010/test
server.Get("/test",std::bind(&func1,std::placeholders::_1,std::placeholders::_2));

//example:  127.0.0.1:10010/some123abc
server.Get("/some*",std::bind(&func2, std::placeholders::_1, std::placeholders::_2));

//example:  127.0.0.1:10010/value:1234
server.Get("/value:",std::bind(&func3, std::placeholders::_1, std::placeholders::_2));

//example:  127.0.0.1:10010/sum?param1=100&param2=23
server.Get("/sum",std::bind(&func4, std::placeholders::_1, std::placeholders::_2));

uv::SocketAddr addr("127.0.0.1", 10010);
server.bindAndListen(addr);
loop.run();

}

More examples here.
API's document here.