Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.
- 测试页
- 使用 线程池 + 非阻塞socket + epoll(ET和LT均实现) + 事件处理(Reactor和模拟Proactor均实现) 的并发模型
- 使用状态机解析HTTP请求报文,支持解析GET和POST请求
- 访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件
- 实现同步/异步日志系统,记录服务器运行状态
- 经Webbench压力测试可以实现上万的并发连接数据交换
.
|-- build.sh
|-- CGImysql
| |-- README.md
| |-- sql_connection_pool.cpp
| `-- sql_connection_pool.h
|-- config.cpp
|-- config.h
|-- http
| |-- http_conn.cpp
| |-- http_conn.h
| `-- README.md
|-- lock
| |-- locker.h
| `-- README.md
|-- log
| |-- block_queue.h
| |-- log.cpp
| |-- log.h
| `-- README.md
|-- main.cpp
|-- makefile
|-- root
| |-- fans.html
| |-- favicon.ico
| |-- judge.html
| |-- logError.html
| |-- log.html
| |-- picture.html
| |-- README.md
| |-- registerError.html
| |-- register.html
| |-- test1.jpg
| |-- video.html
| |-- welcome.html
| |-- xxx.jpg
| `-- xxx.mp4
|-- server
|-- show_errno
| |-- README.md
| `-- show_errno.h
|-- test_presure
| |-- README.md
| `-- webbench-1.5
| |-- ChangeLog
| |-- COPYRIGHT
| |-- debian
| | |-- changelog
| | |-- control
| | |-- copyright
| | |-- dirs
| | `-- rules
| |-- Makefile
| |-- socket.c
| |-- tags
| |-- webbench
| |-- webbench.1
| |-- webbench.c
| `-- webbench.o
|-- threadpool
| |-- half-sync-reactive.bmp
| |-- README.md
| `-- threadpool.h
|-- timer
| |-- lst_timer.cpp
| |-- lst_timer.h
| `-- README.md
|-- webserver.cpp
`-- webserver.h
-
系统环境
- Centos 7
- MYSQL 8.0.22
- 以上是作者运行的环境,可自行调整
-
浏览器环境
- Chrome
-
测试前确保已经安装好MYSQL
// 建立yourdb库
// 这里的yourdb是自定义名字,是后面main中的databasename
CREATE DATABASE yourdb;
USE yourdb;
// 创建user表,表名不更改
CREATE TABLE user(
username char(50) NULL,
passwd char(50) NULL
)ENGINE=InnoDB;
// 添加数据,这里作为测试表是否可用,其实也是等于创建了一个用户
INSERT INTO user(username, passwd) VALUES('name', 'passwd');
- 修改main.cpp中的数据库初始化信息
//MYSQL登录名,密码,DATABASE数据库名
string user = "root";
string passwd = "root";
string databasename = "yourdb";
- 编译
# 方式1
$ sh ./build.sh
# 方式2
$ make server
- 运行主程序
$ ./server
- 也可个性化配置参数运行主程序
$ ./server [-p port] [-l LOGWrite] [-m TRIGMode] [-o OPT_LINGER] [-s sql_num] [-t thread_num] [-c close_log] [-a actor_model]
温馨提示:以上参数不是非必须,不用全部使用,根据个人情况搭配选用即可.
- -p,自定义端口号
- 默认9006
- -l,选择日志写入方式,默认同步写入
- 0,同步写入
- 1,异步写入
- -m,listenfd和connfd的模式组合,默认使用LT + LT
- 0,表示使用LT + LT
- 1,表示使用LT + ET
- 2,表示使用ET + LT
- 3,表示使用ET + ET
- -o,优雅关闭连接,默认不使用
- 0,不使用
- 1,使用
- -s,数据库连接数量
- 默认为8
- -t,线程数量
- 默认为8
- -c,关闭日志,默认打开
- 0,打开日志
- 1,关闭日志
- -a,选择反应堆模型,默认Proactor
- 0,Proactor模型
- 1,Reactor模型
- 方式1:以个人主机ip和端口的方式
主机ip:端口
http://175.24.234.48:9006/
- 方式2:在本机上运行则可直接输入端口
端口号
localhost:9006
- 《Linux高性能服务器编程》游双
- TinyWebServer 已经提交Pull request请求merge
- 文章
- 小白视角:一文读懂社长的TinyWebServer
- 最新版Web服务器项目详解 - 01 线程同步机制封装类
- 最新版Web服务器项目详解 - 02 半同步半反应堆线程池(上)
- 最新版Web服务器项目详解 - 03 半同步半反应堆线程池(下)
- 最新版Web服务器项目详解 - 04 http连接处理(上)
- 最新版Web服务器项目详解 - 05 http连接处理(中)
- 最新版Web服务器项目详解 - 06 http连接处理(下)
- 最新版Web服务器项目详解 - 07 定时器处理非活动连接(上)
- 最新版Web服务器项目详解 - 08 定时器处理非活动连接(下)
- 最新版Web服务器项目详解 - 09 日志系统(上)
- 最新版Web服务器项目详解 - 10 日志系统(下)
- 最新版Web服务器项目详解 - 11 数据库连接池
- 最新版Web服务器项目详解 - 12 注册登录
- 最新版Web服务器项目详解 - 13 踩坑与面试题