V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Masutangu
V2EX  ›  分享创造

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

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

    最近用 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   ·   实用小工具   ·   3040 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:13 · PVG 22:13 · LAX 06:13 · JFK 09:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.