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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本