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

2017-02-18 10:26:55 +08:00
 whatTheGhost
https://github.com/whatsGhost/agilNet

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

微信 hebcyeah 邮箱 object_he@yeah.net
htfy96
2017-02-18 12:15:12 +08:00
是 oschina 上之前那个用了 REUSEPORT 的那个吗?之前看了感觉不错,自己最近也打算跟着写一个
whatTheGhost
2017-02-18 12:40:45 +08:00
@htfy96 之前只在 chinaunix 发过,也没用 reuseport 。这个是基于 linux 的 IO 复用机制和基本的 socket 操作实现的。
最近打算写一个非常通俗详细的文档,大概是从零开始搭一个 reactor 模式网络库。希望给别人学习网络编程有点帮助。
Charles0429
2017-02-18 13:17:35 +08:00
@whatTheGhost 楼主看看是否有兴趣 https://www.v2ex.com/t/338361 ,可以发简历到 zhenjiang.xzj@alipay.com 。
whatTheGhost
2017-02-18 14:18:32 +08:00
@Charles0429 感谢了。看了一下,感觉和我的技能重合度低,我也不太了解数据库的底层实现,机会不是很大。谢谢了。
ji4ozhu
2017-02-18 17:40:55 +08:00
海口来么
SlipStupig
2017-02-19 11:12:04 +08:00
@ji4ozhu 遇见传说中的大神....
ji4ozhu
2017-02-19 13:23:35 +08:00
@SlipStupig 不是大神是菜鸟。。
snnn
2017-02-20 10:08:00 +08:00
你是每个线程都有一个 event loop?
whatTheGhost
2017-02-20 11:10:23 +08:00
@snnn 是的,主 EventLoop 负责监听新连接,其他线程的 EventLoop 负责每个终端连接的读写事件,每个 EventLoop 监听多个终端。(在不开线程池情况下,默认只用一个主 EventLoop 来监听所有 IO 事件)
snnn
2017-02-20 19:53:15 +08:00
@whatTheGhost 你这做法从哪学来的?很新颖啊!
whatTheGhost
2017-02-20 21:35:38 +08:00
@snnn 我看 boost.asio 那本书上的例子是不同的线程 同一个 io_service 调度器。这样效率也很高,不同的线程同时回调事件,但是我觉得这样有线程安全性问题,同一个终端连接数据会被不同的线程访问(所以给那本书打了三星~)。在 boost.asio 库源码有个 example 例子实现了 io_service_pool ,就是一个线程对应一个 io_service 。还有陈硕的 muduo 也是这种机制。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/341347

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX