# server-simple **Repository Path**: leonardodacn/server-simple ## Basic Information - **Project Name**: server-simple - **Description**: 用c语言实现的高性能文件服务器 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-01 - **Last Updated**: 2026-05-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HTTP 文件服务器 一个用 C23 编写的高性能、极简 HTTP 文件服务器。 ## 功能特性 - **高性能**: 单线程 I/O 多路复用(Linux: epoll, macOS: kqueue, Windows: IOCP) - **目录列表**: 简洁美观的 HTML/CSS 界面,显示文件大小和修改时间 - **文件下载**: 使用 sendfile(2) 高效传输 - **配置管理**: 自动生成 TOML 格式配置文件,支持命令行参数 - **提取码保护**: 可选提取码访问控制,30 分钟 session 免验证 ## 快速开始 ### Linux ```bash make -f Makefile.linux ./build/linux/server ``` ### macOS ```bash make -f Makefile.macos ./build/macos/server ``` ### Windows (MinGW) ```bash make -f Makefile.windows ./build/windows/server.exe ``` 服务器将在 `http://localhost:8888/` 启动,文件目录为 `static_files/` ## 使用方法 ``` ./build/server [-p 端口] [-d 目录] [-e true|false] [-c 提取码] [-s 最大会话数] -p 端口 监听端口(默认: 8888) -d 目录 文件根目录(默认: static_files) -e 布尔值 开启提取码保护(默认: false) -c 提取码 设置提取码 -s 最大会话数 最大并发 session 数(默认: 1024) ``` ### 示例 ```bash ./build/server # 默认: 端口 8888,目录 static_files ./build/server -p 8080 # 使用端口 8080 ./build/server -d /data # 从 /data 目录提供文件 ./build/server -p 9000 -d /var/www # 自定义端口和目录 ``` ## 配置文件 首次运行会在 exe 所在目录自动生成 `server.toml`(TOML 格式): ```toml [server] port = 8888 dir_root = "static_files" enable_extraction_code = false extraction_code = "" session_max = 1024 ``` 命令行参数会同步保存到配置文件中。 ### 提取码配置 开启提取码保护,访问文件列表和下载时需要输入提取码: ```toml [server] enable_extraction_code = true extraction_code = "your_code" session_max = 1024 ``` - 未输入提取码时显示提取码输入框 - 提取码错误时页面提示错误 - 验证通过后 30 分钟内免重复输入 - 默认关闭,不影响原有使用 ## 构建 ### Linux ```bash make -f Makefile.linux # 编译 make -f Makefile.linux clean # 清理构建产物 ``` ### macOS ```bash make -f Makefile.macos # 编译 make -f Makefile.macos clean # 清理构建产物 ``` ### Windows (MinGW) ```bash make -f Makefile.windows # 编译 make -f Makefile.windows clean # 清理构建产物 ``` ### 静态编译 (Linux) 将编译产物部署到其他 Linux 机器时,可能因 glibc 版本不同导致运行报错(如 `GLIBC_2.38 not found`)。此时可改为静态编译,生成不依赖 glibc 版本的独立二进制: ```bash make -f Makefile.linux LDFLAGS=-static ``` 注意:静态编译后的二进制体积会显著增大。 ## systemd 开机自启 以下变量请根据实际部署情况修改: - `USER`:运行服务所用用户(示例:`ubuntu`) - `GROUP`:运行服务所用用户组(示例:`ubuntu`) - `WORKDIR`:服务所在目录(示例:`/usr/local/server-simple`) 1. 创建 systemd 服务文件: ```bash sudo tee /etc/systemd/system/server-simple.service << EOF [Unit] Description=Simple HTTP File Server After=network.target [Service] Type=simple User=ubuntu Group=ubuntu WorkingDirectory=/usr/local/server-simple ExecStart=/usr/local/server-simple/server Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF ``` 2. 重载并启用服务: ```bash sudo systemctl daemon-reload sudo systemctl enable server-simple sudo systemctl start server-simple ``` 3. 查看状态: ```bash sudo systemctl status server-simple ``` 注意:如果使用了自定义端口或目录,请在 `ExecStart` 后添加对应参数(如 `-p 8888 -d /path/to/root`)。 ## 系统要求 - **Linux**: GCC/Clang(依赖 epoll、sendfile) - **macOS**: Clang(依赖 kqueue) - **Windows**: MinGW-w64 编译器 ## 开发说明 本项目使用 [opencode](https://opencode.ai) 和 [OpenSpec](https://openspec.dev) 进行开发管理: - **opencode**: AI 辅助编程工具,负责代码实现和修改 - **OpenSpec**: 需求管理和变更追踪工具 变更流程: 1. 使用 `openspec new change ` 创建新变更 2. 创建 proposal、design、specs、tasks 文档 3. 使用 `/opsx-apply` 开始实现任务 4. 完成后使用 `/opsx-archive` 归档变更