开题报告
TinyWebServer
是什么
简介:https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/What_is_a_web_server
关于我的疑问,目前的想法是一个webserver必须有applicationserver才能完整,一部分?application用于验证webserver能否完成预定功能。
TinyWebServer项目地址:GitHub - qinguoyi/TinyWebServer: Linux下C++轻量级Web服务器
详解代码:TinyWebServer——从0到服务器开发! - 知乎 (zhihu.com)
原项目是Ubuntu16.04,我用的是是20.04,考虑简洁版还是原生版
简介
Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.相关知识:《linux高性能服务器编程》,《unix网络编程》
- 使用线程池 + 非阻塞socket + epoll(ET和LT均实现) + 事件处理(Reactor和模拟Proactor均实现) 的并发模型;
- 使用状态机解析HTTP请求报文,支持解析GET和POST请求;
- 访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件;
- 实现同步/异步日志系统(根据日志内容大小选择),记录服务器运行状态;
- 经Webbench压力测试可以实现上万的并发连接数据交换;
Mysql
思考过可不可以直接连接宿主机上的MySQL,好像是可以,看着有点麻烦,没有尝试了.
install
1 | apt install mysql-server-5.7 |
- “正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 6968(unatten”
- kill 6968
- 安装过程中会弹出让你配置密码的操作
检查状态
1 | apt install net-tools |
查看运行状态
1 | systemctl status mysql.service |
测试
1 | mysql -uroot -p #回车后输入前面配置的密码,进入mysql |
快速启动
数据库相关
创建数据库、user表、插入一条user数据(应该是用于测试
1 | create database webserver; |
修改main.cpp中的数据库初始化信息
1 | //数据库登录名,密码,库名 |
编译运行
切换到TinyWebServer-master目录下
1 | sh ./build.sh |
fatal error: mysql/mysql.h: 没有那个文件或目录 #include <mysql/mysql.h>
apt-get install libmysqlclient-dev
1
2
3
4
5
运行服务端
```sh
./server
在127.0.0.1:9006查看结果
- 视频看不了,说是不支持该格式(火狐)
再次启动报错
https://blog.csdn.net/cuiyong_xu/article/details/42556925,非正常退出产生问题,强行杀死占用进程
1 | lsof -i |
压测
1 | gcc webbench.c -o webbench |
报错:problems forking worker no. 9754,fork failed.: Resource temporarily unavailable
1 | ulimit -u #查看最大进程数 |
压力测试webbench(转) - 雄哼哼 - 博客园 (cnblogs.com)?服务器挂了,-c设置小点儿,我的是好像有点不太行
计划
- 阅读源码,整理项目架构,给出注释
- 增加功能
- 文件上传和下载:该项目目前只实现了GET请求,没有真正的达到交互
- 登录状态的保存:利用session或cookie
- 大数据量情况下的用户登录验证:将所有用户信息加载到内存中耗时→hash建立多级索引