第 7 章 · 05 综合:一个并发静态文件服务器 本节摘要:这是第 7 章的综合应用,把前四节(socket、HTTP 解析、路由、并发)组装成一个能用的并发静态文件服务器——能监听端口、并发处理多连接、提供静态文件、返回 404、用 curl 与浏览器双重验证。这是本章的最小可用目标,也是后续扩展(动态接口、TLS、中间件)的起点。 内容来源:综合前四节整理的导读。 学习目标 把 socket、HTTP 解析、路由、并发组装成完整服务器。 用 curl -v 与浏览器验证服务器的正确性。 理解这是后续扩展(动态接口、TLS)的起点。 一、学习价值:从「能用」到「可上线」 前四节学了部件,本节把它们焊成一个整体。
本节摘要:这是第 7 章的综合应用,把前四节(socket、HTTP 解析、路由、并发)组装成一个能用的并发静态文件服务器——能监听端口、并发处理多连接、提供静态文件、返回 404、用 curl 与浏览器双重验证。这是本章的最小可用目标,也是后续扩展(动态接口、TLS、中间件)的起点。
内容来源:综合前四节整理的导读。
前四节学了部件,本节把它们焊成一个整体。这个整体虽然简单,但具备了「生产 Web 服务器」的雏形:并发、静态服务、错误处理。理解这个综合,你就有了自己造 Web 服务的起点——后续学 Express/Flask/Spring 时,你清楚框架在帮你封装什么。
启动: socket → bind(8080) → listen 建线程池(或事件循环) 主循环: conn = accept(监听 fd) 把 conn 交给工作线程处理 工作线程处理一条连接: loop: req = recv_and_parse(conn) # 02 节: 解析请求 if 路由表有匹配: # 03 节: 路由 调用处理函数, 得到响应 elif 是静态文件请求: # 03 节: 静态服务 normalize 路径, 检查穿越 # 安全 读文件, 设 Content-Type 构造 200 响应 else: 构造 404 响应 send(conn, 响应) if not keep-alive: break close(conn)
./public/ 放几个文件(index.html、style.css、一张图)。curl -v http://localhost:8080/,看响应行/头/体正确。http://localhost:8080/,看页面渲染、CSS 生效、图片显示。ab -n 1000 -c 100 http://localhost:8080/ 压测,看能否扛住并发。ab/wrk 测并发能力,验证你的并发模型有效。至此第 7 章「造 Web 服务器」全部讲完。你造了一个能并发处理 HTTP、提供静态文件的服务器,理解了 Nginx/Express/Flask 在帮你封装什么。下一章造数据库——从「无状态服务」到「持久化存储」。