Skip to content

Zenitheee/webserver

Repository files navigation

高性能 Web 服务器

这是一个基于 C++实现的高性能 Web 服务器,采用了 Reactor 模式设计,支持 HTTP GET 和 POST 请求处理,并提供简易网盘功能。

主要特性

  • 使用线程池 + 非阻塞 socket + epoll实现高并发处理
  • 采用正则加有限状态机解析 HTTP 请求报文
  • 支持 HTTP GET 和 POST 方法
  • 使用 RAII 机制管理资源
  • 支持优雅关闭连接
  • 使用智能指针自动管理资源
  • 提供简易网盘功能,支持文件上传、下载、删除
  • 支持为上传文件添加描述信息

环境要求

  • Linux 操作系统
  • G++编译器
  • 支持 C++11 标准

编译运行

  1. 编译

    g++ -o server main.cpp http_conn.cpp -pthread
  2. 运行

    ./server 10000
  3. 访问 同一网段下客户端可通过浏览器访问 IP:端口

代码架构

  • main.cpp: 主函数,处理客户端连接,创建线程池并分配任务
  • http_conn.h/cpp: HTTP 连接类,处理 HTTP 请求的解析与响应
  • threadpool.h: 线程池类,管理工作线程
  • locker.h: 封装了互斥锁、条件变量和信号量等线程同步机制
  • resources/: 存放静态资源和上传的文件
  • util.h: 事件处理和文件描述符操作相关函数

核心模块

  1. 线程池:固定数量线程,避免频繁创建销毁线程带来的系统开销
  2. HTTP 处理:支持 GET 和 POST 方法处理
  3. 事件处理:使用 epoll 实现 I/O 多路复用
  4. 网盘功能:支持文件上传、下载、删除和文件描述

HTTP 请求处理

GET 方法

  • 解析请求行和请求头
  • 识别请求的资源路径
  • 返回对应的静态文件

POST 方法

  • 完整支持 POST 请求的解析
  • 支持请求体内容解析
  • 可处理表单提交等操作
  • 专用响应页面展示处理结果
  • 支持文件上传和文件删除操作

网盘功能

文件列表

  • 显示已上传文件的列表
  • 展示文件名、文件大小和文件描述
  • 提供文件下载和删除功能

文件上传

  • 支持通过表单上传文件
  • 可以为上传的文件添加描述信息
  • 描述信息将在文件列表中显示

文件删除

  • 支持一键删除已上传的文件
  • 自动清理相关的描述信息文件

功能演示

服务器启动后,能够响应浏览器的请求,返回静态资源(如 HTML、图片等)。

  • 访问 / 查看文件列表
  • 访问 /form.html 可查看详情页描述
  • 点击文件列表中的文件名可下载文件
  • 点击删除按钮可删除文件

待实现功能

  • 优化代码逻辑,统一 upload 和 delete 的实现规范
  • 实现文件预览功能
  • 支持文件分类管理
  • 添加文件搜索功能
  • 引入数据库存储文件元数据
  • 增强安全性,添加用户认证
  • 支持 HTTPS
  • 完善日志记录系统

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published