文章代码来源:高并发Web服务器
简单介绍
服务器的工作实际上就是监听并且处理各种各样的事件。当服务器处于启动状态,就会不断用Epoll去监听,正在被监听的文件描述符事件。根据返回值和事件类型做出相应的处理。
1 | while(!isClose_) { |
这里面就挑选个人感觉比较重要的 两个时间的处理代码。
处理监听事件
1 | void WebServer::AddClient_(int fd, sockaddr_in addr) { |
处理读写
处理读写事件主要工作相当于将读数据的任务发布给线程池。经过了很多封装,这里面要去源码去层层查看理解。
1 | void WebServer::DealRead_(HttpConn* client) { |
业务处理逻辑
主要解释上部分处理读写事件中的OnProcess
的,这部分代码 线程池里的子线程处理 。注意这里并不是真正的处理逻辑,真正的处理逻辑是client->process()
,他的返回值为真的话,说明处理完一个用户请求了,该做出相应了所以可以看到监听描述符的时间是EPOLLOUT
。当监听到TCP缓冲区不满也就是可写,就会开始写的任务。否则就还是处理读(监听读使事件)。注意这里的读写是对于TCP缓冲区而言。
1 | void WebServer::OnProcess(HttpConn* client) { |
(待更新。。。)