1、项目背景
本项目是一个基于 C语言 开发的轻量级 HTTP 服务器,旨在实现基本的静态文件服务和简单的动态请求处理。
-
核心目标:
-
支持 HTTP/1.1 协议的 GET/POST 请求解析与响应。
-
提供静态资源(HTML、图片等)的快速分发。
-
作为学习网络编程和服务器开发的实践案例,验证高并发场景下的性能优化策略。
-
2、项目功能
核心功能
静态文件服务:
支持返回 HTML、CSS、JS、图片(JPG/PNG)等静态资源。
自动解析 URL 路径,映射到本地文件系统(../source/ 目录)
动态请求处理:
解析 POST 请求内容(如表单提交),支持简单数据库查询(示例中未完全实现)
HTTP 协议支持:
基础请求解析(方法、URL、内容提取)。
响应头生成(状态码、Content-Type、连接控制)
3、项目的设计框架及分析
+—————————-+ | 主程序入口 | | (main.c: main()) | +—————————-+ | v +—————————-+ | TCP 服务器初始化 | | (net.c: init_tcp_ser()) | | – 创建 socket | | – 绑定端口 (bind) | | – 监听连接 (listen) | +—————————-+ | v +—————————-+ | 主循环:接收客户端连接 | | (main.c: accept()) | +—————————-+ | v +—————————-+ | HTTP 请求接收与解析 | | 1. 接收原始数据 | | (net.c: recv_http_request)| | 2. 解析请求方法、URL、内容 | | (net.c: parse_http_request)| | 3. 填充 Http_req_t 结构体 | +—————————-+ | v +—————————-+ | 响应生成与发送 | | (net.c: send_http_response)| | 分支逻辑: | | ├── GET 请求处理 | | │ ├── 静态文件发送 | | │ │ (send_net_file) | | │ └── 特殊路径处理 | | │ (e.g., /favicon.ico)| | └── POST 请求处理 | | ├── 动态内容生成 | | └── 数据库查询 | | (示例未完全实现) | +—————————-+ | v +—————————-+ | 资源管理模块 | | 1. 文件 I/O 操作 | | (net.c: send_net_file) | | 2. 内存缓存机制 | | (未实现,优化方向) | +—————————-+ | v +—————————-+ | 网络通信层 | | – 数据发送 (send) | | – 连接关闭 (close) | +—————————-+
关键数据流向
客户端请求 ↓ [TCP 接收] → recv_http_request() → http_req 缓冲区 ↓ parse_http_request() → Http_req_t 结构体 ↓ send_http_response() ├── 分支1: GET → send_net_file() → 文件内容 └── 分支2: POST → 动态逻辑 → 数据库/拼接响应 ↓ send() → 客户端
4、各个模块功能及技术
1. 网络通信模块
功能:负责 TCP 服务器的初始化、连接管理和数据传输。
2. 协议解析模块
功能:解析 HTTP 请求,提取方法、URL 和内容。
3. 文件处理模块
功能:读取本地文件并发送给客户端,支持静态资源服务。
4. 动态内容处理模块
功能:处理 POST 请求,支持简单的动态内容生成。
5、函数接口
init_tcp_ser() | 初始化 TCP 服务器,返回监听套接字 |
recv_http_request() | 接收 HTTP 请求数据 |
parse_http_request() | 解析请求方法、URL 和内容 |
send_http_response() | 根据请求生成并发送响应 |
send_net_file() | 发送本地文件到客户端 |
6、项目中遇到的困难和解决办法
1、如何根据客户端发送的请求,发送给客户的需要的数据
通过解析URL,根据请求,发送文件给客户端
2、如何实现并发
采用epoll I/O 多路复用技术
7、项目的优化方向
1、完善更多功能
2、优化UI界面
评论前必须登录!
注册