Feat: 代码提交
This commit is contained in:
@@ -1,3 +1,178 @@
|
||||
# computer-network
|
||||
# Simple Web Server 项目说明
|
||||
|
||||
🎉 计算机网络课程设计
|
||||
## 项目概述
|
||||
这是一个用 Go 语言实现的多线程 Web 服务器,作为计算机网络课程设计的成果。
|
||||
|
||||
## 功能特性
|
||||
- ✅ **多线程并发处理**:使用 goroutine 处理并发客户端请求
|
||||
- ✅ **HTTP GET 方法支持**:完整支持 HTTP/1.1 GET 请求
|
||||
- ✅ **HTTP 请求解析**:解析请求行、HTTP 版本和头部
|
||||
- ✅ **HTTP 响应构造**:自动构建符合 HTTP/1.1 标准的响应报文
|
||||
- ✅ **状态码支持**:
|
||||
- 200 OK - 成功获取资源
|
||||
- 404 Not Found - 资源不存在
|
||||
- 501 Not Implemented - 不支持的请求方法(仅支持 GET)
|
||||
- ✅ **Content-Type 自动识别**:根据文件扩展名自动设置正确的 MIME 类型
|
||||
- ✅ **访问日志记录**:控制台实时显示访问日志
|
||||
- ✅ **Web 管理控制台**:图形化界面管理和监控服务器
|
||||
- ✅ **日志管理功能**:在线清空访问日志
|
||||
- ✅ **配置管理**:支持 JSON 格式的配置文件
|
||||
|
||||
## 项目结构
|
||||
```
|
||||
computer-network/
|
||||
├── go.mod # Go 模块文件
|
||||
├── main.go # 程序入口
|
||||
├── config.json # 配置文件
|
||||
├── config/
|
||||
│ └── config.go # 配置管理(端口号、根目录等)
|
||||
├── server/
|
||||
│ ├── server.go # 服务器主逻辑(监听、并发处理)
|
||||
│ ├── handler.go # HTTP 请求处理
|
||||
│ ├── request.go # HTTP 请求解析
|
||||
│ └── response.go # HTTP 响应构造
|
||||
├── logger/
|
||||
│ └── logger.go # 访问日志记录
|
||||
├── admin/
|
||||
│ └── admin.go # Web 管理控制台
|
||||
└── web/ # 静态文件根目录
|
||||
├── index.html # 主页
|
||||
├── test.html # 测试页面
|
||||
├── 404.html # 错误页面
|
||||
└── 501.html # 501 错误页面
|
||||
```
|
||||
|
||||
## 运行方法
|
||||
|
||||
### 1. 编译
|
||||
```bash
|
||||
go build -o webserver.exe .
|
||||
```
|
||||
|
||||
### 2. 运行
|
||||
```bash
|
||||
./webserver.exe
|
||||
```
|
||||
或者
|
||||
```bash
|
||||
webserver.exe
|
||||
```
|
||||
|
||||
### 3. 访问服务
|
||||
- 主服务器:http://localhost:9000
|
||||
- 管理控制台:http://localhost:9001
|
||||
|
||||
## 配置说明
|
||||
默认配置(在 config.json 文件中):
|
||||
```json
|
||||
{
|
||||
"port": 9000,
|
||||
"admin_port": 9001,
|
||||
"root_dir": "./web"
|
||||
}
|
||||
```
|
||||
|
||||
可以通过修改 config.json 文件来更改配置:
|
||||
- `port`:HTTP 监听端口
|
||||
- `admin_port`:管理控制台端口
|
||||
- `root_dir`:静态文件根目录
|
||||
|
||||
## 功能验证
|
||||
|
||||
### 1. 正常访问(200 OK)
|
||||
访问存在的页面:
|
||||
```bash
|
||||
curl http://localhost:9000/
|
||||
curl http://localhost:9000/index.html
|
||||
curl http://localhost:9000/test.html
|
||||
```
|
||||
|
||||
### 2. 错误页面(404 Not Found)
|
||||
访问不存在的页面:
|
||||
```bash
|
||||
curl http://localhost:9000/notfound.html
|
||||
curl http://localhost:9000/missing-page
|
||||
```
|
||||
|
||||
### 3. 不支持的方法(501 Not Implemented)
|
||||
使用 POST 方法:
|
||||
```bash
|
||||
curl -X POST http://localhost:9000/test
|
||||
```
|
||||
|
||||
### 4. 管理控制台功能
|
||||
访问管理控制台查看:
|
||||
- 实时访问日志
|
||||
- 服务器状态
|
||||
- 访问请求统计
|
||||
- 清空日志功能
|
||||
|
||||
访问:http://localhost:9001
|
||||
|
||||
## 访问日志格式
|
||||
日志输出格式:
|
||||
```
|
||||
[时间] 客户端IP 请求方法 请求URL HTTP版本 状态码 响应时间
|
||||
```
|
||||
|
||||
示例:
|
||||
```
|
||||
[2025-03-30 12:34:56] 127.0.0.1 GET /index.html HTTP/1.1 200 15ms
|
||||
[2025-03-30 12:35:02] 127.0.0.1 GET /notfound.html HTTP/1.1 404 5ms
|
||||
[2025-03-30 12:36:10] 127.0.0.1 POST /test HTTP/1.1 501 2ms
|
||||
```
|
||||
|
||||
## 技术实现
|
||||
|
||||
### HTTP 请求解析
|
||||
- 读取 TCP 数据流
|
||||
- 按换行符分割请求行和头部
|
||||
- 提取方法、URL、HTTP 版本
|
||||
- 解析头部键值对
|
||||
|
||||
### HTTP 响应构造
|
||||
- 状态行(HTTP/1.1 状态码 描述)
|
||||
- 响应头部(Content-Type、Content-Length 等)
|
||||
- 响应体(HTML 内容或文件内容)
|
||||
|
||||
### 多线程并发
|
||||
```go
|
||||
for {
|
||||
conn, err := listener.Accept()
|
||||
if err != nil { continue }
|
||||
go handleConnection(conn) // 每个连接一个 goroutine
|
||||
}
|
||||
```
|
||||
|
||||
### MIME 类型支持
|
||||
- HTML: text/html
|
||||
- CSS: text/css
|
||||
- JavaScript: application/javascript
|
||||
- JSON: application/json
|
||||
- 图片: image/jpeg, image/png, image/gif 等
|
||||
- 文本: text/plain
|
||||
|
||||
## 依赖
|
||||
- Go 1.21+
|
||||
- 仅使用 Go 标准库,无第三方依赖
|
||||
|
||||
## 课设要求完成情况
|
||||
|
||||
| 要求 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| 设计控制界面 | ✅ | Web 管理控制台 + 控制台日志 |
|
||||
| 配置端口号 | ✅ | JSON 配置文件 |
|
||||
| 启动/停止服务器 | ✅ | Ctrl+C 优雅停止 |
|
||||
| 实时访问日志 | ✅ | 控制台输出 + Web 界面 |
|
||||
| 多线程处理并发请求 | ✅ | goroutine 并发 |
|
||||
| 解析 HTTP 请求 | ✅ | 完整解析请求行和头部 |
|
||||
| 支持 GET 方法 | ✅ | 完整支持 GET |
|
||||
| 501 Not Implemented | ✅ | 非 GET 方法返回 501 |
|
||||
| URL 到文件映射 | ✅ | 在根目录查找文件 |
|
||||
| 200 OK 响应 | ✅ | 文件存在时返回 200 |
|
||||
| 404 Not Found | ✅ | 文件不存在返回 404 |
|
||||
| 响应头部构造 | ✅ | Content-Type、Content-Length |
|
||||
| 使用 Go 语言 | ✅ | 完全使用 Go 实现 |
|
||||
|
||||
## 停止服务器
|
||||
按 Ctrl+C 停止服务器,或直接关闭终端窗口。
|
||||
|
||||
Reference in New Issue
Block a user