C++从0开始写Web服务器 - 00 项目概述
2020-03-31 19:29
1501 查看
目录
- 00 项目概述
- 01 线程同步机制包装类
- 02 半同步/半反应堆线程池(上)
- 03 半同步/半反应堆线程池(下)
- 04 http连接处理(上)
- 05 http连接处理(中)
- 06 http连接处理(下)
- 07 定时器处理非活动连接(上)
- 08 定时器处理非活动连接(下)
- 09 日志系统(上)
- 10 日志系统(下)
- 11 数据连接池
- 12 注册和登录校验
- 13 服务器测试
- 14 项目遇到的问题及解决方案
- 15 项目涉及的常见面试题
功能
- Linux下C++轻量级Web服务器基于C/C++语言和B/S模型
- 实现web端的注册和登录,通过数据库连接池访问服务器
- 实现同步和异步日志系统,记录服务器运行状态的功能
- 通过Webbench对服务器进行测试,可以实现上万并发连接 每秒钟响应请求数:552852 pages/min
- 每秒钟传输数据量:1031990 bytes/sec
- 所有连接访问均成功
框架
- 项目框架主要分为I/O处理单元、逻辑处理单元和存储单元三个模块 I/O处理单元和逻辑处理单元对应半同步/半反应堆线程池
- 逻辑处理单元和存储单元对应数据库连接池和日志系统
-
实现http请求报文的处理与响应
工作流程
以一个请求到来具体的处理过程介绍项目工作流程,具体包括web端和服务器建立连接,访问服务器数据库完成登录和注册,并通过定时器完成非活动连接的处理,最后服务器运行状态通过日志系统进行记录。
- web端和服务器端建立连接 采用epoll的边缘触发模式同时监听多个文件描述符,采用同步I/O模拟proactor模式处理事件,主线程负责监听客户端是否发起请求
- 当web端发起http请求时,主线程接收请求报文,然后将任务插入请求队列,由工作线程通过竞争从请求队列中获取任务
- 通过http类中的主从状态机对请求报文进行分析,根据请求报文对客户端进行http响应,然后由主线程给客户端发送响应报文。
-
单例模式创建数据库连接池,避免频繁建立连接,用于后续web端登录和注册校验访问服务器数据库
-
web访问的欢迎界面为GET请求,登录和注册界面是POST请求。
-
同步的方式下,工作线程直接写入日志文件
-
由于非活跃连接占用了连接资源,严重影响服务器的性能,通过实现一个服务器定时器,处理这种非活跃连接,释放连接资源。
web端测试
-
测试前确认已安装MySQL数据库
//建立yourdb库 create database yourdb set utf8; //创建users表 USE yourdb; CREATE TABLE users( username char(50) NULL, passwd char(50) NULL )ENGINE=InnoDB; //添加数据 INSERT INTO users(username, passwd) VALUES('name', 'passwd');
-
修改main.c中的数据库初始化信息
//root root为服务器数据库的登录名和密码 connection_pool *connPool=connection_pool::GetInstance("localhost","root","root","yourdb",3306,5);
-
修改http_conn.cpp中的数据库初始化信息
//root root为服务器数据库的登录名和密码 connection_pool *connPool=connection_pool::GetInstance("localhost","root","root","yourdb",3306,5);
-
修改http_conn.cpp中的root路径
const char* doc_root="/home/qgy/github/ini_tinywebserver/root";
-
CGI多进程注册/登录校验
打开http_conn.cpp中CGI,关闭同步线程
380 //同步线程登录校验 381 //#if 0 423 //#endif 425 //CGI多进程登录校验 426 #if 0 495 #endif
-
修改sign.cpp中的数据库初始化信息
//root root为服务器数据库的登录名和密码 connection_pool *connPool=connection_pool::GetInstance("localhost","root","root","yourdb",3306,5);
-
生成check.cgi
make check.cgi
-
将生成的check.cgi放到root文件夹
cp ./check.cgi ./root
同步线程注册/登录校验
关闭http_conn.cpp中CGI,打开同步线程
380 //同步线程登录校验 381 //#if 0 423 //#endif 425 //CGI多进程登录校验 426 #if 0 495 #endif
生成server
make server
启动server
./server port
浏览器端
ip:port
更多资料
- 关注公众号【两猿社】,进入公众号
- 带你丰富互联网相关项目经验,轻松应对校招!!!
- 项目模块详细讲解,在公众号内持续更新!!!
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 使用开源C++项目WebSocketpp构建web服务器
- 独立项目-建立Web服务器-00
- 无法在Web服务器上启动调试。您不具备调试此应用程序的权限,此项目的URL位于Internet区域
- 今天碰到试图运行项目时出错:无法在web服务器上启动调试.调试失败,因为没有启用集成windows身份验证
- 在用Tomcat服务器创建的Javaweb项目中设置默认打开网页
- Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述
- MultiView 和 View Web 服务器控件概述
- Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules (web项目不能加载到服务器))
- 从零开始服务器部署web项目
- 试图运行项目时出错:无法在web服务器上启动项目得解决办法(转载)
- [入门]基于Spring MVC和Tomcat服务器的JavaWeb项目
- asp.net无法在Web服务器上启动调试项目的解决办法
- 关于如何将java web项目上传至腾讯云服务器
- 在服务器上部署web项目。
- 从零开始搭建服务器部署web项目
- WebLogic使用总结(五)——Web项目使用Sigar在WebLogic服务器部署遇到的问题
- 利用maven发布web项目到远程服务器
- 地表最强idea Web项目打成war包到服务器运行
- 阿里云服务器的web项目发布之路:(四)云服务器mysql数据库的安装