跳转至

简介

本实验通过 socket 编程,利用多线程技术,实现一个简易的支持并发的 HTTP/1.0 服务器,并可以利用线程复用、I/O 复用、缓存、预测等机制,提高 HTTP 服务器的性能。

重要

本实验作为代码编程实验,会进行查重,一切抄袭行为后果自负!

如何提问?

提问的智慧

以下是一些要点:

  • 提问前,请先 STFW 和 RTFM,ChatGPT 也是一个可考虑的选择;
  • 尽量使你的问题是可复现的、明确的,并在此基础上裁剪定位到会导致出问题的核心代码;
  • 详细描述问题,并提供相关指令及相关问题的报错截图,如果涉及系统问题请提供系统版本。

优先在实验文档评论区、Issue 区 及课程群内讨论实验的相关问题以便解决共性问题。

实验要求

编程语言:C/C++/Rust,核心功能部分的代码不能使用外部网络库。

本次实验评分从正确性和性能两方面评价,具体测试和评分标准详见「测试及评分」部分。

实验提交材料

请按照以下目录结构组织你的 GitHub 仓库:

.                       // Git 根目录
├── lab3                // 实验三根目录
│   ├── README.md       // 实验三实验报告
│   └── src             // 实验三文件根目录
│       ├── Makefile    // Makefile 或其他文件
│       ├── server      // 编译出的可执行文件,这里只是说明文件位置,不要提交
│       └── server.c    // 源代码
└── ...                 // 其他文件

注意:

  • 实验报告中请注明编译的方法和运行方法,使得 ./lab3/src 目录下源代码在测试环境中编译出文件名为 server 的二进制可执行文件,否则可能导致测试失败。
  • 不要提交任何编译中间文件和编译出的可执行二进制文件。

评分规则和要点

本次实验满分为 100%,其中:

  • 实验报告占 20%,包括:
    • 编译和运行方法说明;
    • 描述整体设计,使用的技术;
    • 使用 siege 测试的结果和分析;
  • 正确性测试占 60%;
  • 选做部分额外加分占 20%,超出部分将被截断至 20%。

注意:

  • 合理控制实验报告字数,介绍清楚即可;
  • 对 Git 的使用要求及扣分说明参照 lab2;
  • 如果确认有抄袭情况,该实验分数记为 0 分。

参考资料