muduo是chenshuo开源的一个基于reactor pattern的多线程网络库。同时他也写了一本关于此网络库的书《Linux多线程服务端编程:使用muduo C++网络库》,推荐阅读。
muduo部分的文章偏向笔者自己的整理,想了解更细节的东西可以找上面那本书出来看看
muduo整体是按照回调函数方式编写的,这样虽然在调用的时候更方便,但对于初学者梳理逻辑来说就有点“绕”了。看“别人家”的网络库,抓住以下几点有利于快速理解代码:
上图中也能看出网络库的整体处理逻辑:
先上图:(看不清楚可右键--在新标签页中打开图片)
1号虚线框干了两件事儿,一是完成的描述符的创建和bind操作;二是注册了回调函数。
注意:
紫色的ConnectionCallback在3号虚线框中用到;红色的MessageCallback在4号虚线框中用到;蓝色的TcpServer::newConnection在3号虚线框中用到;橙色的Acceptor::handleRead在3号虚线框中用到(请原谅我的颜色描述能力。。。)
ConnectionCallback和MessageCallback是暴露给外界使用的。ConnectionCallback在请求成功(::accept)后调用;MessageCallback在处理具体请求时调用
2号虚线框也干了两件事儿,一是完成socket的listen操作,二是将socket注册到epoll模型中
2号虚线框已经把listen的socket注册到epoll中,当有客户端连接请求时会触发epoll模型。3号虚线框描述的就是此时的操作。3号虚线框把accept成功的socket放到了TcpConnection中,并按照轮询方式把TcpConnection的socket注册到不同的EventLoop中
4号虚线框epoll模型开始等待外界发送请求,这时会触发channel_的handRead方法,在handRead中读取了请求,然后调用了TcpServer中注册的messageCallback_方法。
messageCallback_方法中不仅包含处理请求的逻辑,还必须考虑怎样返回结果,其中一种可选方式是调用TcpConnection的send方法发送结果
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有