Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ uv-cpp Public
forked from wlgq2/uv-cpp

libuv wrapper in C++11 /libuv C++11网络库

License

Notifications You must be signed in to change notification settings

ykt66/uv-cpp

Repository files navigation

uv-cpp

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


Language Translations:


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

Dependencies

Features

  • C++11 functional/bind style callback instead of C-style function pointer.
  • TCP and UDP wrapper.
  • DNSandHttp:DNS query and http support,Http routing based on radix tree.
  • TimerandTimerWheel:Heartbeat timeout judgment with time complexity of O(1).
  • Async:libuv async wrapper,but optimized the problem of calling multiple times but callback will only be called once.
  • PacketandPacketBuffer:Send and receive packet of Tcp data stream. Support custom data packet structure (such as uvnsq)
  • Log interface.

Build Instructions

  • VS2017 (windows)
  • Codeblocks (linux)
  • CMake (linux)

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 <iostream>
#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.

About

libuv wrapper in C++11 /libuv C++11网络库

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 99.8%
  • Other 0.2%

AltStyle によって変換されたページ (->オリジナル) /