基于 libuv C++11 风格的网络库 采用 Reactor 模式封装 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
intlinfo
V2EX    C++

基于 libuv C++11 风格的网络库 采用 Reactor 模式封装

  •  
  •   intlinfo 2021-01-28 19:30:13 +08:00 3312 次点击
    这是一个创建于 1785 天前的主题,其中的信息可能已经有所发展或是发生改变。
    基于 libuv 开发的 C++ 纯异步高性能的网络服务器,目前拥有 Tcp Queue WorkQueue Signal 4 大组件,完全继承 libuv 的优点 不同的是采用 Reactor 模式封装。

    目前可商用基于 libuv 开源的网络库不多,甚至是没有。所以我基于 uv 开发了这么一套近完善的库。

    预期实现: http-server pc-protocol multiple-thread-curl-client

    特性如下

    1.CPU 全核利用不会浪费系统资源,并持有 Client index 复用机制。

    2.优秀的跨平台能力,一套代码封装 libuv 的 2 套代码,不用担心底层机制。

    3.服务器全过程采用纯异步非阻塞模式。

    4. 异步的信号处理,多种关闭实例的例子。

    4.接口强大简单易用非继承,采用仿函数的回调形式。

    5.除此之外,如需更新底层无需更改业务层的代码,直接替换 libuv 既可。

    6.完全继承 libuv 原生优点 windows iocp linux epoll 。

    项目地址: https://github.com/X-Crack/libuv-evpp

    欢迎各路大神 pr 一起完善,它不是一个人的,它是属于开源世界的。
    9 条回复    2021-02-08 15:39:42 +08:00
    maty
        1
    maty  
       2021-01-28 20:00:07 +08:00
    跨平台的话,期望能有个 cmake
    jdz
        2
    jdz  
       2021-01-28 20:13:41 +08:00 via Android
    用 brpc 不香吗
    intlinfo
        3
    intlinfo  
    OP
       2021-01-28 20:29:53 +08:00
    @jdz
    使用场景不一样,根据需求决定吧,每个人喜欢的库也都不同。
    intlinfo
        4
    intlinfo  
    OP
       2021-01-28 20:30:53 +08:00
    @maty
    目前还不稳定,cmake 后面在搞。
    本地开发手动搭建的跨平台环境 已经可以跨平台,但最新提交的 master 未经测试。

    开发环境是 win vs2019 c++20
    YouLMAO
        5
    YouLMAO  
       2021-02-01 01:59:36 +08:00 via Android
    @intlinfo 看了,基本对于需求方不可用,现实需要一个 client 连多个 service,比如 redis,es,都配连接池,比如 redis 开 2,es 开 20,你根本不支持嘛,单点对单点异步基本没有意义
    wlgq2
        6/div>
    wlgq2  
       2021-02-04 17:31:54 +08:00 via Android
    https://github.com/wlgq2/uv-cpp
    我自己用了好几年了,个人觉得挺好用的。再过几年网络就要进去 C 艹标准库鸟。
    intlinfo
        7
    intlinfo  
    OP
       2021-02-07 13:07:28 +08:00
    @YouLMAO 是的,目前还在各种测试状态,并没有那么完善,后面会根据不用场景的需求完成不同的场景模块代码。

    目前是不可用的状态,未来几个月内会推出稳定版。 嘿嘿!感谢大佬的支持。
    intlinfo
        8
    intlinfo  
    OP
       2021-02-07 13:08:04 +08:00
    @wlgq2 这是大佬您写的嘛。 挺不错的!
    intlinfo
        9
    intlinfo  
    OP
       2021-02-08 15:39:42 +08:00
    @YouLMAO
    仔细回想了一下您说的问题,server 对外是预留了 一个 map 的 context 可以保存各种不同的类或指针,因为是一个 any 类型,通过 loop 可以很方便的对每个线程对应的每个会话进行调用(连接各种数据库,它是一个 size_t 类型的大小)。它是绝对的线程安全的。

    如果是 client 的话,没有认真写,能用就好了。后面会一点点完善的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3202 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 11:33 PVG 19:33 LAX 03:33 JFK 06:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86