重写muduo网络库之调用流程的梳理

目录

1、流程叙述

2、我们看看TcpServer的构造都做了什么?

3、start()

3.1 开启loop

3.2 连接的建立

3.3 数据的收发

4、连接的关闭


muduo网络库各组件梳理见此博客

重写muduo库之组件梳理

1、流程叙述

首先,我们是怎么使用的?

1.定义一个loop,就是baseloop
2.InetAddress打包了IP地址和端口号
3.创建server对象,给到EchoServer的构造函数,通过其参数进行初始化底层的TCPserver对象(相当于创建了TcpServer对象),保留了loop
4.设置了2个回调setConnectionCallback、setMessageCallback
5.设置了底层的loop线程的数量(这个数量不包括baseloop)

很好的把网络代码和业务代码分离了,我们只需要做开发者需要关注的:
6.我们用户作为开发者只需要关注下面的2个方法:

响应连接的建立和断开、响应读写事件

设置完之后
7.server.start();启动loop   loop.loop()

总结而来就是:首先构建tcpserver对象,设置回调方法,然后设置底层的loop线程的数量,然后调用start方法,最后开启主线程的loop

2、我们看看TcpServer的构造都做了什么?

创建了Acceptor,EventLoopThreadPool(还没有开启loop线程)

首先Acceptor创建了一个非阻塞的listenfd,然后把它打包成1个acceptchannel,准备往mainloop的poller上扔。

然后设置了一些tcp选项,创建socket,绑定bind,给channel设置回调,就是readcallback

也就是说:Acceptchannel只关心读事件。
只关心acceptchannel有新用户的连接的事件,底层的channel会去执行readcallback,对于Acceptor的readcallback执行的是handleRead

我们回过来继续看tcpserver的构造函数,接下来创建了EventLoopThreadPool(还没有开启loop线程),

然后执行了setNewConnectionCallback,我们刚才看到acceptor的构造函数

绑定了一个setReadCallback,也就是说,有新用户的连接,底层的channel就会去执行readcallbac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值