Linux下c++开发的轻量级web服务器

原始代码:WebServer.zip

增加定时检测非活跃模块:WebSever_tick.zip(使用的链表,模板)

项目描述:

通过 HTTP 协议与客户端(通常是浏览器(Browser))进行通信,来接收、存储、处理来自客户端的 HTTP 请求,并对其请求做出 HTTP 响应,返回给客户端其请求的内容(文件、页等)或返回一个 Error 信息

项目环境:

Centos7 + Visual Studio Code + gcc

项目步骤:

1.规划整个项目的架构及流程

   架构 :线程池+非阻塞socket+epoll+事件处理的并发模型 、 状态机解析HTTP请求

   同步 I/O 模拟 Proactor 模式的工作流程:

   

 

2.线程同步机制类封装及线程池实现

   同步机制类封装(临界区) :

                        互斥锁类 条件变量类 信号量类

   线程池实现:

                         成员变量:线程池线程数量、线程池数组、最大请求量、请求队列、请求队列锁、请求队列信号量、是否结束线程

                        成员函数:构造函数、析构函数、追加函数

3.项目整体流程代码实现

     1.接收端口(在接收端口之前要一个判断是否有输入端口)

     2.处理SIGPIPE信号

     3.创建线程池

     4.创建http_conn用户组users

     5.创建监听的socket(端口记得设置为端口复用)

     6.创建epoll,用来 管理服务器监听端和客户端的socket描述符

     7.while循环,处理数据

4.解析HTTP请求报文

      请求报文格式:

     

     1.把缓冲区内容一行行解析出来,判断依据\r\n

     2.解析HTTP请求行,获得请求方法,目标URL,以及HTTP版本号

     3.解析HTTP请求的头部信息

     4.判断消息体(即请求数据)是否被完整读入

     5.主状态机解析请求

5.解析请求完成及生成响应信息

当得到一个完整、正确的HTTP请求时,通过内存映射的方式获取文件

    响应报文格式:

    

  生成响应文件的思想跟解析请求文件是差不多的:生成状态行、响应头、响应体(即响应正文)

 项目结果:

 

 

 

 

 

最后,HTTP协议一篇不错的文章HTTP请求方式中8种请求方法(简单介绍) - 韦邦杠 - 博客园 (cnblogs.com) 

 

      

posted @ 2022-12-30 17:08  balabalahhh  阅读(677)  评论(0编辑  收藏  举报