a tiny http server 一个简单的http服务器,使用C++开发。使用了C++11新特性。
默认目录为二进制文件下的./www
- Reactor模型
- 基于epoll的多路复用
- 支持Get,Post,Head三种请求方法,同时支持浏览缓存(IMS头)
- 可自动增长的缓冲区
- 基于priority_queue与shared_prt的应用层定时器
- Epoll:封装epoll
- Thread Pool:轻量线程池
- Http Server:管理线程池,定时器,并分配任务
- Http Request:解析http请求报文
- Http Response:响应http请求
- Buffer:缓存区类(参考了muduo的buffer)
- Timer:基于优先队列的应用层定时器
- I7 9400f
- RAM 16G
- gentoo
- g++ 10.2
- LinuxKernel 5.8
原因:chrome计算TTFB时间方式的不同。首先服务器设定500ms是主动断开时间。同过抓包就能发现回应报文时间正常。但chrome收到服务端的Not Modified(304)报文后并没有结束TTFB的计时。直到tcp连接关闭,又因为服务端设置500ms后超时主动关闭连接,所以TTFB时间会固定在500ms。但是奇怪的是在非Not Modified报文下,chrome不会等待到tcp流的关闭,而是只要收到相应的数据就停止计时。
生成http响应包时,每生成一个包就要mmap一个文件然后释放,这里虽然用了mmap减少拷贝次数,但是也招架不住次次读硬盘,导致磁盘IO寄了,应该加一个中间层的缓存。