在LINUX大作业中,我利用课程上所学知识和参考书籍自学知识设计了一个简易多线程HTTP服务器。
本程序具有非常良好的可扩展性,充分利用了C++的语言特性,按面向对象的设计**进行设计和编码,非常符合软件工程中高聚合低耦合的设计理念。
程序主要的技术点:
- 利用抽象类、虚函数实现任务的多态
- 利用线程池处理任务队列
- 链表结构实现内存池
- setsid+fork实现守护进程
- syslog输出日志
- 封装网络API
根据调研和分析,HTTP服务器的主要功能有:
-
HTTP应用为C/S模型,因此HTTP服务最主要的功能是监听、接受并处理来自客户的资源访问请求。
-
客户请求具有随机性,因此服务器需要能够具有一定的并发处理用户请求的能力。
-
为了保证后期的维护方便,服务器必须要能够对运行和异常进行日志输出。
-
服务器必要保证能够长时间的后台运行。
本服务器设计为多线程服务器,分为主线程和工作线程,主线程的功能是监听客户请求,而工作线程的功能是从任务队列里取出任务执行。
- 类和程序功能对应关系:
- PthreadPool类实现工作线程的运行
- HttpResponse类具体化Task类,完成任务封装
- Daemon类完成服务器后台化
- Listener类完成对网络的监听
- MemoryPool类完成内存池的封装