第 7 章 · 05 综合:一个并发静态文件服务器


文档摘要

第 7 章 · 05 综合:一个并发静态文件服务器 本节摘要:这是第 7 章的综合应用,把前四节(socket、HTTP 解析、路由、并发)组装成一个能用的并发静态文件服务器——能监听端口、并发处理多连接、提供静态文件、返回 404、用 curl 与浏览器双重验证。这是本章的最小可用目标,也是后续扩展(动态接口、TLS、中间件)的起点。 内容来源:综合前四节整理的导读。 学习目标 把 socket、HTTP 解析、路由、并发组装成完整服务器。 用 curl -v 与浏览器验证服务器的正确性。 理解这是后续扩展(动态接口、TLS)的起点。 一、学习价值:从「能用」到「可上线」 前四节学了部件,本节把它们焊成一个整体。

第 7 章 · 05 综合:一个并发静态文件服务器

本节摘要:这是第 7 章的综合应用,把前四节(socket、HTTP 解析、路由、并发)组装成一个能用的并发静态文件服务器——能监听端口、并发处理多连接、提供静态文件、返回 404、用 curl 与浏览器双重验证。这是本章的最小可用目标,也是后续扩展(动态接口、TLS、中间件)的起点。

内容来源:综合前四节整理的导读。

学习目标

  1. 把 socket、HTTP 解析、路由、并发组装成完整服务器。
  2. 用 curl -v 与浏览器验证服务器的正确性。
  3. 理解这是后续扩展(动态接口、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)

三、上手第一步与验证

  1. 按架构实现,先每连接一线程(最简)。
  2. ./public/ 放几个文件(index.html、style.css、一张图)。
  3. 用 curl 验证:curl -v http://localhost:8080/,看响应行/头/体正确。
  4. 用浏览器验证:打开 http://localhost:8080/,看页面渲染、CSS 生效、图片显示。
  5. 测试 404:访问不存在的路径,返回 404。
  6. 测试并发:用 ab -n 1000 -c 100 http://localhost:8080/ 压测,看能否扛住并发。

本节要点回顾

  1. 综合 = socket + HTTP 解析 + 路由 + 并发,组装成一个能用的服务器。
  2. 验证用 curl -v + 浏览器双重:curl 看协议细节,浏览器看渲染。
  3. 这是起点:后续可扩动态接口、TLS/HTTPS、中间件、模板引擎。
  4. 压测:用 ab/wrk 测并发能力,验证你的并发模型有效。

推荐上手顺序

  1. 先实现单线程版(socket+解析+静态服务),curl 验证。
  2. 加每连接一线程并发,curl 多次并发验证。
  3. 加路径穿越防护、404 处理。
  4. 浏览器验证页面渲染。
  5. ab 压测,记录并发数。
  6. (进阶)改线程池或事件循环,再压测对比。

至此第 7 章「造 Web 服务器」全部讲完。你造了一个能并发处理 HTTP、提供静态文件的服务器,理解了 Nginx/Express/Flask 在帮你封装什么。下一章造数据库——从「无状态服务」到「持久化存储」。


发布者: 作者: 灏天文库 转发
评论区 (0)
U