C++高性能网络服务器
本项目实现了一个基于Reactor模式的Web服务器,传输层采用I/O多路复用技术管理TCP连接,同时在应用层搭建了一个http服务器,用于响应Get请求,实现静态资源的访问。最后,本项目还可以在Web服务器的基础上自由扩展应用层服务。
Enjoy it,it's gonna be really fun!!!
vector<char>
接口保持一致,目前使用编译期宏定义的方式切换,方便之后做压测对比。之后会考虑设计一个KBuffer纯虚类,然后将RingBuffer和Muduo的Buffer作为作为KBuffer子类,利用C++多态,使用基类的指针指向子类的对象,这样来切换真正所使用的Buffer类.Update in 20-04-14
本服务器采用了事件循环 + 非阻塞IO的主题架构,通过事件驱动和事件回调来实现业务逻辑。事件循环用于做事件通知,如果有新的连接被Accept,则把新连接的socket对象的管理工作转交给其他线程。模型的整体架构如下图所示,模型的架构发展过程可见History.
压力测试使用了Webench,来自linya,谢谢!!!压力测试的方法也来自linya,再次谢谢!!!
这里先做一个简要的对比,后期慢慢的详细对比,写一个更完整的文案
QPS(响应消息体为短字符串) | QPS(响应消息体为长字符串) | |
---|---|---|
Muduo | 115111 | --- |
Mine | 104644 | --- |
这里只对长连接进行测试,线程模型是1个主线程+3个IO线程,为了对比线性Buffer和RingBuffer,使用了不同长度的响应消息体(长字符串对应5000个字符,短消息体对应12个字符)。下图是响应消息体为短字符串的测试结果(长字符还未对比)
最近提炼了一下代码,MyWebserver的并发量有了很大提升,测试结果如下