1.4.12 变为 1.5.0
moo 今天提醒我,说得非常对:“鉴于 SVN 中引入的所有更改,我们不应将下一个版本称为 1.4.12,而应称为 1.5.0。”解除‘尝试与 1.4.x 插件 API 保持兼容’的限制后,我立即开始拆分内部结构并以略微不同的方式重新组合它们。如果您目前正在为 1.4.x 开发插件,请确保它在 1.5.0 中将无法在不进行更改的情况下工作。让我解释一下正在发生的变化。对于插件开发者而言,主要的变化有三四点: # fdevent-handling 接口现在更简单,并隐藏了不愉快的细节。您只需提供一个 iosocket # 随处可见的 chunkqueues,并且不再直接调用套接字上的 write() 或 read()。所有这些都通过 network_* 接口完成。您无需关心平台相关的函数。 # 有一个基于 lemon 的 HTTP-Response 解析器(参见 mod_proxy_core) # 使用 TRACE ( ) 和 ERROR ( ) 代替 log_error_write(...) 所有这些都已在 SVN 中。目前还有一些其他更改正在进行中,主要围绕中央状态引擎以及请求在服务器中的处理步骤。目前我们有以下步骤: # 接受连接 # 读取请求头 + 请求内容 # 调用后端并发送所有数据 # 读取后端响应并准备响应头 # 将响应发送给客户端 # 如果是 keep-alive 则返回第 2 步,否则关闭连接 我目前实现的略有不同: # 接受连接 # 读取请求头 # 设置请求处理过滤器链 # 将请求内容转发到后端 # 读取后端响应头 # 设置响应处理过滤器链 # 将响应内容转发到客户端 # 如果是 keep-alive 则返回第 2 步,否则关闭连接 这遵循一个简单的想法:‘解析 HTTP 头后,您就拥有了如何继续处理请求的所有信息。’所有插件都将被调用并可以挂接到过滤器链中。 * mod_uploadprogress 将挂接到请求过滤器链中以跟踪连接进度 * mod_deflate 将替换响应过滤器链中的内容 * mod_demux 将把代理响应拆分为多个客户端响应 * mod_http_chunking 将提供通用的 HTTP/1.1 分块 何时与后端建立连接将留给后端决定: * 当它们拥有请求头时 * 当它们拥有部分请求内容时 (POST body) * 当它们拥有完整的请求内容时(如现在)