2026-03-30 22:05:16 +08:00
2026-03-30 11:37:52 +08:00
2026-03-30 11:37:52 +08:00
2026-03-30 22:05:16 +08:00

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. 编译

go build -o webserver.exe .

2. 运行

./webserver.exe

或者

webserver.exe

3. 访问服务

配置说明

默认配置(在 config.json 文件中):

{
  "port": 9000,
  "admin_port": 9001,
  "root_dir": "./web"
}

可以通过修改 config.json 文件来更改配置:

  • port:HTTP 监听端口
  • admin_port:管理控制台端口
  • root_dir:静态文件根目录

功能验证

1. 正常访问(200 OK)

访问存在的页面:

curl http://localhost:9000/
curl http://localhost:9000/index.html
curl http://localhost:9000/test.html

2. 错误页面(404 Not Found)

访问不存在的页面:

curl http://localhost:9000/notfound.html
curl http://localhost:9000/missing-page

3. 不支持的方法(501 Not Implemented)

使用 POST 方法:

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 内容或文件内容)

多线程并发

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 停止服务器,或直接关闭终端窗口。

S
Description
🎉 计算机网络课程设计
Readme MIT 59 KiB
Languages
Go 65.1%
HTML 32.4%
Batchfile 2.5%