高性能网络库设计|青训营笔记

81 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第8天

网络库之:Accept类的设计和实现

Accept类的作用?

accept类的作用就是将socket连接的几个api进行了封装,并且同EventLoop进行了融合,更加符合事件驱动的一个模式

其中封装了包括:make socket, bind, listen, accept

相关类的介绍

InetAddress:

  • 本类能够对于struct sockaddr_int进行了简单的封装,能够自动的转换字节顺序

EPOLLER

  • 上一篇文章讲述过了,封装IO多路复用,进行事件的驱动

Accept的执行流程

  • 创建Accept类的时候,构造函数会创建socket,然后进行本地地址的绑定
  • 调用func:listen执行封装了的listen然后注册listenfd可读的事件,当客户端发送了连接过来之后, listenfd可读然后执行回调函数(accept接受连接 + 用户自定义的回调函数)

具体的实现和分析:

Accept类的成员

重点关注的就是维护着listenfd的Socket& CHANNEL, 新连接建立时候的回调函数

Screen Shot 2022-08-12 at 10.20.35 PM.png


构造函数的实现:封装几个api

Screen Shot 2022-08-12 at 10.20.52 PM.png

构造函数帮我们实现了make socket,bind, listen,注册了listen的回调函数

回调函数的实现

这里面的精华所在了:

  • 作为listenfd读事件触发的回调函数,代表这时候就有客户端发起连接的请求了,那么处理accept
  • 将得到的connfd作为参数发送给用户自定义的回调函数,能够支持用户的自定义函数

Screen Shot 2022-08-12 at 10.48.09 PM.png

TcpConnection的简介和功能流程

TcpConnection其实就是表示的是一个TCP连接用于提供给包括TcpServer, TcpClient等类使用的一种类, 维护了一个连接。

enable_from_this

继承了enable_from_this主要是因为模糊的生命期, 然后能够提供一个在本类中指向自身的指针供一些回调函数的使用,因为一些函数都是需要TcpConnection的指针作为参数进行操作的

内部实现功能

维护了通信四元组的信息,设置了一些回调函数

TcpServer执行的总的流程

TcpServer.start() -> Acceptor->用户连接,拿到了连接的connfd->TcpConnection设置了回调函数->注册到EPOLLER中->执行Channel的回调函数