此项目是基于 Linux 开发的轻量级多线程 Web 服务器,在应用层实现了一个简单的 HTTP 服务器,
对客户端发送的GET请求进行处理;主要由两个单元组成:IO处理单元 和 逻辑单元;IO处理主要负责
对就绪事件的处理以及网络数据的读写;逻辑单元负责对http请求的解析以及生成响应报文。
网络编程相关的(创建sock,bind,listen)
创建epoll,讲要监听的对象加入
创建http连接数组,保存所有连接信息(任务类)
创建线程池类
开始调用epoll_wait:
监听sock就绪,则accept建立连接存到连接数组中,并且初始化(其中包括,通信的sock加入epoll,以及创建定时器加入定时器链表)
管道就绪,标记一下,后面处理
异常就绪,则断开连接,删除定时器
读事件就绪,调用http连接数组中对应元素的read(其中包括 更新定时器,将sock读到自定义的读缓冲区中);接着将整个连接加入线程池类中的任务队列。
写事件就绪,调用write(其中包括 更新定时器,将自定义的写缓冲区中的数据拷贝到sock中)
最后,如果定时器响应了,则调用定时器链表的处理函数。
线程数量,线程池;
任务数量,任务队列(存整条连接)
互斥锁,条件变量,信号量
线程类是否结束
append函数(往任务队列加任务/连接)
work函数(线程的入口函数,static)
run函数(线程的,但是通过work中线程池类参数调用)(取出任务,执行任务的process)
全局的定时器链表(static)
全局的epoll fd(static,这也是为什么初始化连接和后面写时能将连接的fd加入epoll的原因)
自定义的读缓冲区
自定义的写缓冲区
init函数(初始化连接,main函数讲了)
read,write函数(main里面讲了)
process函数(任务执行函数,具体就是解析http(分为两部分,从读缓冲区读http数据,解析并写到写缓冲中,然后将连接的fd加入epoll)
节点是定时器(每个节点都挂载着一条连接)
没啥好说的就是一条链表
(每个类直接都是紧密相连的,特别主要main函数中的任务数组,以及任务连接什么时候加入epoll,已经线程池类)