在线商城服务器
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界面