简易静态web服务器

tiny_http_server

项目地址:https://github.com/hangxin001/tiny_http_server

磕磕叨叨

本次项目算是对知识的一次总结吧。一开始模块的规划还是清晰的,但后面就有点小乱了。果然想做到优雅的编程还是困难的。

默认目录为二进制文件下的./www

特性:

  • Reactor模型
  • 基于epoll的多路复用
  • 支持Get,Post,Head三种请求方法,同时支持浏览缓存(IMS头)
  • 可自动增长的缓冲区
  • 基于priority_queue与shared_prt的应用层定时器

Class

  • Epoll:封装epoll
  • Thread Pool:轻量线程池
  • Http Server:管理线程池,定时器,并分配任务
  • Http Request:解析http请求报文
  • Http Response:响应http请求
  • Buffer:缓存区类(参考了muduo的buffer)
  • Timer:基于优先队列的应用层定时器

压力测试

  • siege c10k 通过
  • 电脑测试到20k左右,压力测试软件并发上不去了。

硬件环境:

  • I7 9400f
  • RAM 16G

软件环境

  • gentoo
  • g++ 10.2
  • LinuxKernel 5.8

Bug

Not Modified报文,TTFB时间无论什么情况都会固定在500ms。

原因:chrome计算TTFB时间方式的不同。首先服务器设定500ms是主动断开时间。同过抓包就能发现回应报文时间正常。但chrome收到服务端的Not Modified(304)报文后并没有结束TTFB的计时。直到tcp连接关闭,又因为服务端设置500ms后超时主动关闭连接,所以TTFB时间会固定在500ms。但是奇怪的是在非Not Modified报文下,chrome不会等待到tcp流的关闭,而是只要收到相应的数据就停止计时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值