c++造了个异步框架的轮子来练手 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Masutangu
V2EX    分享创造

c++造了个异步框架的轮子来练手

  •  1
     
  •   Masutangu
    Masutangu 2016-09-01 10:00:28 +08:00 4554 次点击
    这是一个创建于 3379 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近用 c++ 基于 libuv 造了个异步框架的轮子,废话不多说。

    源码在此: https://github.com/Masutangu/SAF

    同时写了篇文章聊了下异步框架设计的思想和实现:《简单异步应用框架的实现》

    c++ 停留在写业务逻辑的水平,希望得到 c++高手的意见。另外 libuv 是 c 库,和 c++ 结合起来代码写的有点绕(主要是回调不好传),大家多多提点意见,欢迎交流~

    19 条回复    2016-09-04 15:45:17 +08:00
    KingHL
        1
    KingHL  
       2016-09-01 11:12:09 +08:00
    点个赞,支持。
    watzds
        2
    watzds  
       2016-09-01 11:35:37 +08:00
    mason961125
        3
    mason961125  
       2016-09-01 12:25:08 +08:00
    楼主用的 Clion ?
    Masutangu
        4
    Masutangu  
    OP
       2016-09-01 13:20:53 +08:00
    @mason961125 是的 怎么看出来的..
    mason961125
        5
    mason961125  
       2016-09-01 18:12:17 +08:00
    @Masutangu 开头注释的风格
    Masutangu
        6
    Masutangu  
    OP
       2016-09-01 18:57:09 +08:00
    @mason961125 老司机..哈哈
    mason961125
        7
    mason961125  
       2016-09-01 20:57:16 +08:00
    @Masutangu 为什么没考虑用 libevent 或者 libev 呢?
    jerseyjerk
        8
    jerseyjerk  
       2016-09-01 21:01:26 +08:00 via Android
    点赞。几个小问题:支持可变长度消息吗?支持读 /写超时吗?可以 disable nagle 吗(低延迟场景中常用)?另外我看了一下 buffer.cpp 的 append 方法,这个方法只 reallocate 两倍,如果 Len 超过两倍,那 memcpy 会 overrun memory 的吧?以上之言如有错误请轻喷。
    Masutangu
        9
    Masutangu  
    OP
       2016-09-02 08:14:48 +08:00
    @jerseyjerk 消息的打解包由业务来实现,所以消息长度是由业务来定制的。读写超时后续我补充上。 disable nagle 的话,我得看看 libuv 是否有提供选项支持(之前看文档没有看到过), append 方法 bug ,粗心了,我 fix 下。谢谢提出这么多问题哈哈
    Masutangu
        10
    Masutangu  
    OP
       2016-09-02 08:15:21 +08:00
    @mason961125 因为最近想看看 libuv 的代码 所以先用用熟悉下~
    macrosea
        11
    macrosea  
       2016-09-02 13:57:14 +08:00
    react-cpp 用 libev 封装的异步框架 , 非常不错, C++社区活跃了, C++才能再现辉煌
    https://github.com/CopernicaMarketingSoftware/REACT-CPP
    matthewgao
        12
    matthewgao  
       2016-09-02 16:10:42 +08:00
    似乎不支持状态间消息同步?
    Masutangu
        13
    Masutangu  
    OP
       2016-09-02 20:26:14 +08:00
    @macrosea 感谢分享!有空学习下
    Masutangu
        14
    Masutangu  
    OP
       2016-09-02 20:26:47 +08:00
    @matthewgao 状态间消息同步是指?业务一开始创建的消息对象会在各个状态间透传
    matthewgao
        15
    matthewgao  
       2016-09-02 22:42:36 +08:00
    @Masutangu 我的意思是,比如 state2 的运行依赖于 state1 返回的数据
    Masutangu
        16
    Masutangu  
    OP
       2016-09-02 23:43:35 +08:00
    @matthewgao 是的,一开始创建的消息对象,其指针会传入每个 state 中,所以可以通过消息对象来传递状态间依赖的数据
    Masutangu
        17
    Masutangu  
    OP
       2016-09-02 23:50:07 +08:00
    @matthewgao 估计这块我解释得不够清楚,等周末我更新下博客,补充几个图例
    kingddc314
        18
    kingddc314  
       2016-09-03 08:31:50 +08:00
    c++的异步应该支持 Lambda
    Masutangu
        19
    Masutangu  
    OP
       2016-09-04 15:45:17 +08:00
    @kingddc314 是指框架提供的接口支持么?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5075 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 09:20 PVG 17:20 LAX 01:20 JFK 04:20
    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