Skip to content

Devilsean/XWebServer

Repository files navigation

项目概述

本项目是一个现代化的C++11 Web服务器应用,专注于提供稳定可靠的Web服务。系统集成了用户认证、静态资源服务、数据库交互等完整的Web应用功能,适用于实际生产环境中的中小型Web服务部署。

主要改动

  1. 全面C++11化:使用智能指针、lambda表达式、右值引用、default/delete函数等现代C++特性
  2. 内存安全优化:用std::string替代char*,减少内存泄漏风险
  3. 并发模型改进:线程池使用std::threadstd::vector,自动管理线程生命周期
  4. 编译性能提升:使用前置声明减少头文件依赖,加快编译速度
  5. 代码结构优化:更清晰的类职责划分和命名规范

应用特性

核心功能

  • 用户管理系统:提供完整的用户注册、登录和认证功能,支持密码安全存储
  • 静态资源服务:高效提供图片、视频、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

编译步骤

  1. 配置数据库

    # 创建数据库
    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');"
  2. 编译项目

    make

功能特性列表

基础功能

  • HTTP协议支持:完整支持HTTP/1.1协议,解析GET/POST请求
  • 静态资源服务:支持图片、视频、HTML、CSS、JavaScript等静态文件

演示图片

演示图片1

首页

演示图片2

注册

演示图片3

登录

演示图片4

功能中心

演示图片5

图片展示

演示图片6

视频展示

演示图片7

下载中心

演示图片8

注册错误

演示图片9

登录错误

  • 用户认证:基于MySQL的用户注册和登录功能
  • 并发处理:高性能线程池实现,支持上万并发连接
  • 超时管理:定时器自动清理非活动连接
  • 日志记录:可配置的同步/异步日志系统

C++11特性体现

  1. 智能指针std::unique_ptr用于资源管理,避免内存泄漏

    std::unique_ptr<Utils> m_utils;
  2. Lambda表达式:简化线程创建和回调函数

    m_threads.emplace_back([this] { this->run(); });
  3. 范围for循环:更简洁的容器遍历

  4. 自动类型推导auto关键字减少冗余代码

  5. 默认/删除函数:更精确地控制类的行为

    ~http_conn() = default;
    http_conn(const http_conn &) = delete;
    http_conn &operator=(const http_conn &) = delete;
  6. 常量表达式:编译期计算,提高性能

    static constexpr int READ_BUFFER_SIZE = 2048;
  7. 初始化列表:更安全、更简洁的初始化方式

    int m_pipefd[2]{};
    char m_read_buf[READ_BUFFER_SIZE]{};
  8. 右值引用:优化资源传递,减少不必要的拷贝

  9. 标准线程库std::thread替代pthread,跨平台兼容性更好

  10. 条件变量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

核心类说明

  1. WebServer:服务器核心类,管理各个模块的初始化和运行

    • init():初始化服务器配置,包括端口、日志、数据库等参数
    • eventLoop():主事件循环,协调各类事件处理
    • thread_pool():初始化线程池,合理分配工作线程资源
    • sql_pool():初始化数据库连接池,确保数据库访问的稳定性
  2. HttpServer:HTTP服务器类,基于muduo库实现,负责HTTP协议的处理和响应

    • start():启动HTTP服务器,开始监听客户端连接
    • setHttpCallback():设置HTTP请求处理的回调函数
    • setThreadNum():设置工作线程数量,实现one loop per thread架构
    • onConnection():处理客户端连接建立事件
    • onMessage():处理客户端消息到达事件
  3. HttpResponse:HTTP响应类,负责构建和管理HTTP响应

    • setStatusCode():设置HTTP响应状态码
    • setContentType():设置响应内容类型
    • addHeader():添加响应头部字段
    • setBody():设置响应体内容
    • toBuffer():将响应转换为缓冲区数据
  4. threadpool:线程池类,管理工作线程和任务队列

    • append():安全地添加任务到工作队列,支持并发访问
    • run():工作线程执行函数,持续从任务队列获取并处理任务

功能改进计划

未来将重点改进以下应用功能:

  • 用户界面优化:改进前端页面设计,提升用户体验
  • 安全增强:增加HTTPS支持和安全认证机制
  • 监控系统:完善系统监控和告警功能
  • 部署简化:提供更便捷的部署和配置方案

贡献指南

欢迎提交Issue和Pull Request来帮助改进这个项目!

感谢

感谢TinyWebServer-C++11

感谢muduo_cpp11

许可证

本项目采用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.

About

XWebServer 是一款基于 C++11 编写的高性能事件驱动 Web 服务器。项目深度参考了 Muduo 的网络库底座与 TinyWebServer 的业务应用逻辑,实现了从 Proactor 到 Multi-Reactor 架构的演进。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages