跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 发一个自己用于生产环境 C++网络库
未分類
11 5 月 2020

发一个自己用于生产环境 C++网络库

发一个自己用于生产环境 C++网络库

資深大佬 : wlgq2 17

项目地址:uv-cpp
之前发过,最近失业空闲,给这个网络库增加了 http 支持,实现了一个基于 RadixTree 的路由,可以支持通配符*,或者设置参数之类。大概可以实现这样的效果

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(); }  

顺带和 boost.asio 以及 nginx 做了性能对比

发一个自己用于生产环境 C++网络库 发一个自己用于生产环境 C++网络库
ping-pong 测试显示 uv-cpp 有不弱于 boost.asio 的并发性能,不过这主要是由于 libuv 本身很强大。

1000 并发,100000 次请求和 nginx 对比

发一个自己用于生产环境 C++网络库 发一个自己用于生产环境 C++网络库
不出意料的,单位时间请求及字节传输都不如 nginx,不过 nginx 不知道是不是我配置有问题,有 500+次失败请求,uv-cpp 没有。

接口也比较简单,10 行代码实现一个 echo 服务器

#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);     });       uv::SocketAddr addr("0.0.0.0", 10005, uv::SocketAddr::Ipv4);     server.bindAndListen(addr);     loop->run(); }  

欢迎 star 、issue 、pr……

大佬有話說 (19)

  • 資深大佬 : Hanggi

    编译要多久?

  • 資深大佬 : fgwmlhdkkkw

    我有一个小建议。我之前也写过 libuv 的 wrapper,,但是摆脱不了回调地狱。看了 c++的协程我又没搞明白,所以就终止了。做好还是整合一些协程,这样用起来舒服点。

  • 資深大佬 : sanjusss

    很强大,已 star 。但估计我想写 http 服务的时候就忘了 /狗头

  • 資深大佬 : hankai17

    正在撸协程的 https://github.com/hankai17/my_sylar

  • 資深大佬 : paoqi2048

    乍一看跟 muduo 有点像

  • 資深大佬 : waruqi

    赞,可以试试用 xmake 来构建维护,以及 c++包集成

  • 主 資深大佬 : wlgq2

    @Hanggi cmake 一二十秒应该

  • 主 資深大佬 : wlgq2

    @fgwmlhdkkkw 等 C 艹 20 以后考虑。

  • 資深大佬 : cholerae

    所以是用在什么生产环境的?

  • 主 資深大佬 : wlgq2

    @cholerae 前公司,游戏服务相关。

  • 資深大佬 : kylix

    很厉害,已收藏。。。

  • 資深大佬 : Cloutain

    主 nice!!!
    我平时用的 libevent,哈哈哈,最喜欢简单易用的网络库

  • 資深大佬 : BlackZhu

    和瑞克学的?

  • 資深大佬 : tienhua

    性能对比的那两种结果图是怎么生成的

  • 主 資深大佬 : wlgq2

    @tienhua 万能的 excel

  • 資深大佬 : cabing

    不错哦。

  • 資深大佬 : OneMan

    evpp 还不错,服务器选择东西很多,其实一个简单的没依赖的客户端 TCP 库还挺少

  • 資深大佬 : liuguang

    牛逼是牛逼,不过 rust 的 hyper 更强!![狗头]

  • 資深大佬 : yazoox

    厉害啊

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具