前置知识1.网络IO和2.网络设计模式和3.半同步/半反应堆
本项目是自己学习linux系统编程和网络编程的第一个实战项目,之前用了比较快的速度对整个系统编程和网络编程的知识体系进行了窥探,理解了一些基本原理但是还不够深入。希望借助本项目来对这两块的知识进行更深入的理解和掌握。
本项目全部参考qinguoyi/TinyWebServer: Linux下C++轻量级Web服务器 (github.com)进行实现,学习目标如下:
- 借助该项目全面深入巩固系统编程和网络编程知识体系;
- 初步掌握项目开发的基本过程,学会架构设计、功能划分、模块化、逻辑抽象等基本能力;
- 初步了解一些简单的软件工程设计模式;
- 对已有的系统进行功能完善和拓展。
开篇将主要从宏观层面来把握该代码的体系结构。了解WebServer框架之前还需要了解一些同步异步、阻塞非阻塞,以及网络设计模式的知识,这部分内容可见本站的1.网络IO和2.网络设计模式。
关于半同步/半异步、3.半同步/半反应堆,主从模式的介绍可以查看这篇博客高山仰之可极,谈半同步/半异步网络并发模型 - 知乎 (zhihu.com)。
有了上述的知识积累,下面的框架图就能很好的理解了。IO部分就是反应堆,工作线程就是同步模式,请求队列充当中间件,会涉及到生产者消费者模型。再往下面走一层就是具体的业务逻辑实现,包括踢掉超时的客户端,处理http请求和日志实现。
采用半同步/半反应堆框架,和异步日志系统,半同步/半反应堆这块的概念比较熟悉,异步日志系统这部分内容作者是参考陈硕大佬的书来写的,后续也需要去观摩下:)。