本项目是一个现代化的C++11 Web服务器应用,专注于提供稳定可靠的Web服务。系统集成了用户认证、静态资源服务、数据库交互等完整的Web应用功能,适用于实际生产环境中的中小型Web服务部署。
- 全面C++11化:使用智能指针、lambda表达式、右值引用、default/delete函数等现代C++特性
- 内存安全优化:用
std::string替代char*,减少内存泄漏风险 - 并发模型改进:线程池使用
std::thread和std::vector,自动管理线程生命周期 - 编译性能提升:使用前置声明减少头文件依赖,加快编译速度
- 代码结构优化:更清晰的类职责划分和命名规范
- 用户管理系统:提供完整的用户注册、登录和认证功能,支持密码安全存储
- 静态资源服务:高效提供图片、视频、HTML、CSS、JavaScript等各类静态文件
- 数据库集成:与MySQL数据库无缝集成,实现用户数据的持久化存储
- 多模式部署:支持不同部署模式以适应各种应用场景
- 日志监控:提供完善的日志记录功能,便于系统运维和问题排查
全面支持各类Web内容:
- 图片展示(JPG、PNG等格式)
- 视频播放(MP4等格式)
- 文档下载(TXT等格式)
- 动态页面(HTML、CSS、JS)
- 操作系统:Linux (Ubuntu 16.04+ 推荐)
- 编译器:GCC 4.8+ (支持C++11)
- 数据库:MySQL 5.7+
- 依赖库:pthread, mysqlclient
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install libmysqlclient-dev-
配置数据库:
# 创建数据库 mysql -u root -p -e "CREATE DATABASE tinyweb;" # 创建用户表 mysql -u root -p tinyweb -e "CREATE TABLE user(username char(50) NULL, passwd char(50) NULL)ENGINE=InnoDB;" # 添加测试用户 mysql -u root -p tinyweb -e "INSERT INTO user(username, passwd) VALUES('admin', '123456');"
-
编译项目:
make
- HTTP协议支持:完整支持HTTP/1.1协议,解析GET/POST请求
- 静态资源服务:支持图片、视频、HTML、CSS、JavaScript等静态文件
演示图片:
- 用户认证:基于MySQL的用户注册和登录功能
- 并发处理:高性能线程池实现,支持上万并发连接
- 超时管理:定时器自动清理非活动连接
- 日志记录:可配置的同步/异步日志系统
-
智能指针:
std::unique_ptr用于资源管理,避免内存泄漏std::unique_ptr<Utils> m_utils;
-
Lambda表达式:简化线程创建和回调函数
m_threads.emplace_back([this] { this->run(); });
-
范围for循环:更简洁的容器遍历
-
自动类型推导:
auto关键字减少冗余代码 -
默认/删除函数:更精确地控制类的行为
~http_conn() = default; http_conn(const http_conn &) = delete; http_conn &operator=(const http_conn &) = delete;
-
常量表达式:编译期计算,提高性能
static constexpr int READ_BUFFER_SIZE = 2048;
-
初始化列表:更安全、更简洁的初始化方式
int m_pipefd[2]{}; char m_read_buf[READ_BUFFER_SIZE]{};
-
右值引用:优化资源传递,减少不必要的拷贝
-
标准线程库:
std::thread替代pthread,跨平台兼容性更好 -
条件变量:
std::condition_variable提供更安全的线程同步
# 使用默认配置启动
./server
# 自定义端口启动
./server -p 8080
# 完整参数列表
./server -p port -l log_write -m trigmode -o linger -s sql_num -t thread_num -c close_log -a actor_model- 首页:
http://your_server_ip:9006 - 注册:
http://your_server_ip:9006/register.html - 登录:
http://your_server_ip:9006/login.html
| 参数 | 描述 | 默认值 |
|---|---|---|
| -p | 端口号 | 9006 |
| -l | 日志写入方式(0:同步, 1:异步) | 0 |
| -m | 触发模式组合 | 0 |
| -o | 优雅关闭连接(0:关闭, 1:开启) | 0 |
| -s | 数据库连接池数量 | 16 |
| -t | 线程池线程数量 | 16 |
| -c | 关闭日志(0:开启, 1:关闭) | 0 |
| -a | 并发模型(0:Proactor, 1:Reactor) | 0 |
-
WebServer:服务器核心类,管理各个模块的初始化和运行
init():初始化服务器配置,包括端口、日志、数据库等参数eventLoop():主事件循环,协调各类事件处理thread_pool():初始化线程池,合理分配工作线程资源sql_pool():初始化数据库连接池,确保数据库访问的稳定性
-
HttpServer:HTTP服务器类,基于muduo库实现,负责HTTP协议的处理和响应
start():启动HTTP服务器,开始监听客户端连接setHttpCallback():设置HTTP请求处理的回调函数setThreadNum():设置工作线程数量,实现one loop per thread架构onConnection():处理客户端连接建立事件onMessage():处理客户端消息到达事件
-
HttpResponse:HTTP响应类,负责构建和管理HTTP响应
setStatusCode():设置HTTP响应状态码setContentType():设置响应内容类型addHeader():添加响应头部字段setBody():设置响应体内容toBuffer():将响应转换为缓冲区数据
-
threadpool:线程池类,管理工作线程和任务队列
append():安全地添加任务到工作队列,支持并发访问run():工作线程执行函数,持续从任务队列获取并处理任务
未来将重点改进以下应用功能:
- 用户界面优化:改进前端页面设计,提升用户体验
- 安全增强:增加HTTPS支持和安全认证机制
- 监控系统:完善系统监控和告警功能
- 部署简化:提供更便捷的部署和配置方案
欢迎提交Issue和Pull Request来帮助改进这个项目!
本项目采用MIT许可证,与原项目保持一致。
MIT License
Copyright (c) 2023 TinyWebServer-C++11
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.








