在处理移动客户端时,在传输 HTTP 请求期间出现多秒延迟是很常见的。如果您通过预派生 Apache 提供页面或服务,则即使您的应用程序服务器逻辑在 5 毫秒内完成,子进程也将被占用数秒来为单个移动客户端提供服务。我正在寻找支持以下功能的 HTTP 服务器、平衡器或代理服务器:
请求到达代理。代理开始在 RAM 或磁盘中缓冲请求,包括 header 和 POST/PUT 主体。代理不会打开与后端服务器的连接。这可能是最重要的部分。
代理服务器在以下情况下停止缓冲请求:
- 已达到大小限制(例如 4KB),或者
- 请求已完全收到, header 和正文
直到现在,当(部分)请求在内存中时,才会打开到后端的连接并中继请求。
后端发回响应。代理服务器再次立即开始缓冲(最大大小为 64KB。)
由于代理有足够大的缓冲区,后端响应会在几毫秒内完全存储在代理服务器中,并且后端进程/线程可以自由地处理更多请求。后端连接立即关闭。
代理会尽可能快或尽可能慢地将响应发送回移动客户端,而不会连接到后端而占用资源。
我相当确定您可以使用 Squid 执行 4-6,而 nginx 似乎支持 1-3(并且在这方面看起来相当独特)。我的问题是:是否有任何代理服务器可以理解这些缓冲和在就绪之前不打开连接的功能?也许只有一点 Apache config-fu 使得这种缓冲行为变得微不足道?他们中的任何人都认为它不是像 Squid 这样的恐龙,并且支持精益的单进程、异步、基于事件的执行模型?
(Siderant:我会使用 nginx,但它不支持分块 POST 主体,这使得它无法为移动客户端提供服务。是的,便宜的 50 美元手机喜欢分块 POST...叹息)
最佳答案
同时使用 nginx 和 Squid(客户端 — Squid — nginx — 后端)怎么样?当从后端返回数据时,Squid 会将其从 C-T-E: 分块转换为设置了 Content-Length 的常规流,因此也许它也可以标准化 POST。
关于caching - 是否有任何 HTTP 代理可以显式地、可配置地支持请求/响应缓冲和延迟连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/97220/