# Synergy服务器 **Repository Path**: chaoxi6888/http_server ## Basic Information - **Project Name**: Synergy服务器 - **Description**: 实现了一个高性能的HTTP服务器,采用多线程 + epoll I/O复用架构,支持高并发和高效文件传输(零拷贝技术)。服务器能够解析HTTP请求,返回静态文件(如HTML、图片、PDF等),并优化了资源管理,确保稳定运行。 - **Primary Language**: C - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-16 - **Last Updated**: 2025-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Synergy服务器 # 项目概述 这是一个基于C语言实现的高性能HTTP服务器,使用epoll实现I/O多路复用,采用线程池处理客户端请求。服务器支持静态文件服务,能够处理高并发连接。 # 主要特性 1. 高性能网络模型:使用epoll边缘触发(ET)模式实现高效的I/O多路复用 2. 线程池:预创建线程池处理HTTP请求,避免频繁创建销毁线程的开销 3. 连接管理:完善的客户端连接管理,支持高并发连接 4. 静态文件服务:支持各种静态文件类型(MIME类型自动识别) 5. URL解码:支持URL编码的请求路径解码 6. 优雅关闭:支持信号处理的优雅关闭机制 7. 资源管理:完善的资源管理和错误处理机制 # 技术栈 C语言, Linux系统调用, epoll I/O多路复用, POSIX线程(pthread), HTTP/1.1协议。 # 编译与运行 编译 bash `gcc httpserver.c -o httpserver -lpthread` 运行 bash `./httpserver` 服务器默认监听9000端口。 # 配置参数 可以通过修改源代码中的宏定义来配置服务器参数: `#define PROT 9000 // 服务器端口号` `#define LISTENMAX 4096 // 监听队列最大长度` `#define PTHREADMAX 12 // 线程池中线程数量` `#define MAXEVENTS 10000 // epoll实例中事件的最大数量` `#define BUFSIZE 1024 // 缓冲区大小` `#define MAX_CLIENTS 20000 // 最大客户端连接数` # 项目结构 ``` httpserver/ ├── httpserver.c # 服务器主程序 ├── README.md # 项目说明文档 └── Makefile # 编译脚本(可选) ``` # 功能说明 1.静态文件服务: 支持HTML、CSS、JavaScript、图片等静态文件 自动识别文件MIME类型 支持大文件分块传输(sendfile零拷贝) 2.请求处理: 解析HTTP GET请求 支持URL解码 自动处理根路径请求(返回index.html) 3.错误处理: 400 Bad Request 404 Not Found 其他系统错误处理 # 性能优化 1. epoll边缘触发(ET)模式:减少epoll_wait调用次数 2. 线程池:避免线程频繁创建销毁的开销 3. 零拷贝传输:使用sendfile发送文件 4. 非阻塞I/O:所有socket设置为非阻塞模式 5. 引用计数:安全管理客户端连接 # 压力测试 可以使用工具如wrk进行压力测试: bash: wrk -t6 -c100 -d10s http://localhost:9000/ # 已知限制 1. 仅支持HTTP GET方法 2. 不支持动态内容(CGI等) 3. 没有实现HTTP持久连接(Connection: keep-alive) 4. 没有实现HTTP/2或HTTPS支持 # 未来改进方向 1. 添加配置文件支持 2. 实现更完整的HTTP协议支持(POST方法等) 3. 添加日志系统 4. 支持HTTP持久连接 5. 添加HTTPS支持 # 许可证 MIT License