TinyWebServer 是一个开源的 C++轻量级 Web 服务器,该项目非常适合初学者快速实践网路编程,搭建属于自己的服务器。 特性· 使用 线程池 + 非阻塞 socket + epoll(ET 和 LT 均实现) + 事件处理(Reactor 和模拟Proactor 均实现) 的并发模型 · 使用状态机解析 HTTP 请求报文,支持解析 GET 和 POST 请求 · 访问服务器数据库实现 web 端用户注册、登录功能,可以请求服务器图片和视频文件 · 实现同步/异步日志系统,记录服务器的运行状态 · 经 Webbench 压力测试可以实现上万的并发连接数据交换
框架Demo 演示注册演示登录演示请求图片文件演示(6M)请求视频文件演示(39M)压力测试在关闭日志后,使用 Webbench 对服务器进行压力测试,对 listenfd 和 connfd 分别采用 ET 和 LT 模式,均可实现上万的并发连接,下面列出的是两者组合后的测试结果。 · 并发连接总数:10500 · 访问服务器时间:5s · 所有访问均成功
Proactor,LT + LT,93251 QPSProactor,LT + ET,97459 QPSProactor,ET + LT,80498 QPSProactor,ET + ET,92167 QPSReactor,LT + ET,69175 QPS注意:使用本项目的 webbench 进行压测时,若报错显示 webbench 命令找不到,将可执行文件 webbench 删除后,重新编译即可。
源码下载目前有两个版本,版本间的代码结构有较大改动,文档和代码运行方法也不一致。重构版本更简洁,原始版本(raw_version)更大保留游双代码的原汁原味,从原始版本更容易入手。 如果遇到 github 代码下载失败,或访问太慢,可以从以下链接下载,与 Github 最新提交同步。 github:https://github.com/qinguoyi/TinyWebServer 重构版本下载地址:https://pan.baidu.com/share/init?surl=PozKji8Oop-1BYcfixZR0g
原始版本(raw_version)下载地址:https://pan.baidu.com/share/init?surl=asMNDW-zog92DZY1Oa4kaQ
快速运行服务器测试环境· Ubuntu版本16.04 · MySQL版本5.7.29
浏览器测试环境· Windows、Linux 均可 · Chrome · FireFox · 其他浏览器暂无测试
测试前确认已安装 MySQL 数据库// 建立yourdb库 create database yourdb;
// 创建user表 USE yourdb; CREATE TABLE user( username char(50) NULL, passwd char(50) NULL )ENGINE=InnoDB;
// 添加数据 INSERT INTO user(username, passwd) VALUES('name', 'passwd');
修改 main.cpp 中的数据库初始化信息//数据库登录名,密码,库名 string user = "root"; string passwd = "root"; string databasename = "yourdb";
buildsh ./build.sh 启动server./server 浏览器端ip:9006 传送门开源协议:Apache2.0 开源地址:https://github.com/qinguoyi/TinyWebServer -END-
|