|
本帖最后由 路人甲被注册了 于 2020-4-21 05:38 编辑
之前发过:https://github.com/wlgq2/uv-cpp
由于最近失业空闲,给这个网络加上http支持,实现了一个基于RadixTree数据结构的http路由支持,可以支持通配符或者设置参数。比如
- 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¶m2=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();
- }
复制代码
接口简洁,性能堪用,运行稳定。十行代码实现一个服务器。
- 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);
- });
-
- uv::SocketAddr addr("0.0.0.0", 10005, uv::SocketAddr::Ipv4);
- server.bindAndListen(addr);
- loop->run();
- }
复制代码
顺带和大名鼎鼎的boost.asio及nginx做性能测试对比。。
ping-pong测试显示 uv-cpp 有不弱于boost.asio的并发性能,不过这主要是由于libuv本身很强大。
与nginx性能测试对比,1000个并发,100000次请求。单位时间请求及字节传输都弱于nginx,不过nginx不知道是不是配置问题,有500+次失败请求,uv-cpp没有。
由于用到c++11特性,需要gcc4.8以上支持。
欢迎 star 、issue 、pr……
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|