V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whatTheGhost
V2EX  ›  C

写了一个 reactor 模式多线程网络库

  •  
  •   whatTheGhost · 2017-02-18 10:26:55 +08:00 · 2378 次点击
    这是一个创建于 2833 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/whatsGhost/agilNet

    之前通读一遍 muduo 源码,萌生自己写一个网络库的想法。春节时间闭关,假期后每天晚上陆陆续续提交。
    目前完成 reactor 模式事件循环分发, TCP 相关操作封装,线程池分配机制,和定时器列队。现在正在加入 http 支持。
    12 条回复    2017-02-20 21:35:38 +08:00
    whatTheGhost
        1
    whatTheGhost  
    OP
       2017-02-18 10:36:41 +08:00
    2 楼,坐标杭州,两年半工作经验,求一个 C++方向的坑。个人技能树 c++,Qt,Boost,SQLserver,mongDB,Linux,design pattern ……

    微信 hebcyeah 邮箱 [email protected]
    htfy96
        2
    htfy96  
       2017-02-18 12:15:12 +08:00 via Android
    是 oschina 上之前那个用了 REUSEPORT 的那个吗?之前看了感觉不错,自己最近也打算跟着写一个
    whatTheGhost
        3
    whatTheGhost  
    OP
       2017-02-18 12:40:45 +08:00
    @htfy96 之前只在 chinaunix 发过,也没用 reuseport 。这个是基于 linux 的 IO 复用机制和基本的 socket 操作实现的。
    最近打算写一个非常通俗详细的文档,大概是从零开始搭一个 reactor 模式网络库。希望给别人学习网络编程有点帮助。
    Charles0429
        4
    Charles0429  
       2017-02-18 13:17:35 +08:00
    @whatTheGhost 楼主看看是否有兴趣 https://www.v2ex.com/t/338361 ,可以发简历到 [email protected]
    whatTheGhost
        5
    whatTheGhost  
    OP
       2017-02-18 14:18:32 +08:00
    @Charles0429 感谢了。看了一下,感觉和我的技能重合度低,我也不太了解数据库的底层实现,机会不是很大。谢谢了。
    ji4ozhu
        6
    ji4ozhu  
       2017-02-18 17:40:55 +08:00
    海口来么
    SlipStupig
        7
    SlipStupig  
       2017-02-19 11:12:04 +08:00
    @ji4ozhu 遇见传说中的大神....
    ji4ozhu
        8
    ji4ozhu  
       2017-02-19 13:23:35 +08:00
    @SlipStupig 不是大神是菜鸟。。
    snnn
        9
    snnn  
       2017-02-20 10:08:00 +08:00 via Android
    你是每个线程都有一个 event loop?
    whatTheGhost
        10
    whatTheGhost  
    OP
       2017-02-20 11:10:23 +08:00 via Android
    @snnn 是的,主 EventLoop 负责监听新连接,其他线程的 EventLoop 负责每个终端连接的读写事件,每个 EventLoop 监听多个终端。(在不开线程池情况下,默认只用一个主 EventLoop 来监听所有 IO 事件)
    snnn
        11
    snnn  
       2017-02-20 19:53:15 +08:00 via Android
    @whatTheGhost 你这做法从哪学来的?很新颖啊!
    whatTheGhost
        12
    whatTheGhost  
    OP
       2017-02-20 21:35:38 +08:00
    @snnn 我看 boost.asio 那本书上的例子是不同的线程 同一个 io_service 调度器。这样效率也很高,不同的线程同时回调事件,但是我觉得这样有线程安全性问题,同一个终端连接数据会被不同的线程访问(所以给那本书打了三星~)。在 boost.asio 库源码有个 example 例子实现了 io_service_pool ,就是一个线程对应一个 io_service 。还有陈硕的 muduo 也是这种机制。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1190 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 18:22 · PVG 02:22 · LAX 10:22 · JFK 13:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.