本项目参考游双的《Linux高性能服务器编程》和 qinguoyi 前辈的 TinyWebServer,自制实现一个 Linux 下 C++ 轻量级的 Web 服务器,该服务器拥有以下特性:
- 半同步/半反应堆线程池 + epoll(LT + ET)+ Reactor 的并发模型。
- 使用主从状态机处理 http 请求,支持 GET 和 POST 请求。
- Web 实现注册、登录、查看图片和视频的功能。
- 使用日志系统记录服务器运行状态,日志系统支持同步/异步,异步使用循环数组实现。
- 使用定时器处理非活跃连接,定时器容器为时间堆。
目前该服务器已经部署上线,欢迎通过 1.117.27.35:9777
访问 。
由于云服务器带宽较小,视频可能加载不出来XD
- ArchLinux 5.15.2
- MariaDB 10.6.5
- Window、Linux
- Chrome
- FireFox
// 建立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');
connPool->init("localhost", "root", "yourpasswd", "databaseName", 3306, 8);
const char* doc_root = "/home/acg/xlaoTinyWebServer/root"
//main.cpp:
//#define SYNLOG
#define ASYNLOG //异步写日志
#define listenET //listenfd为 ET
//#define listenLT
---------------------------------------------
// http_conn.cpp
#define connfdET //connfd为 ET
//#define connfdLT
#define listenET //listenfd为 ET
//#define listenLT
make server
由于项目使用了 C++11 语法,部分编译器默认不支持,如果执行以上操作失败,请在 makefile 中的 "g++" 后添加 "--std=c++11",再次执行以上操作。
如果使用的 mysql 是 root 用户,需要在一下语句前面添加 "sudo"
./server port
127.0.0.1:port
游双编写的《Linux高性能服务器编程》。
@qinguoyi的 TinyWebServer 项目和庖丁解牛分析。