任何具有显式,可配置支持请求/响应缓冲和延迟连接的HTTP代理?

时间:2008-09-18 21:33:04

标签: caching proxy mobile nginx squid

在处理移动客户端时,在HTTP请求传输过程中出现多秒延迟是很常见的。如果您使用prefork Apache提供页面或服务,即使您的应用程序服务器逻辑在5毫秒内完成,子进程也会在几秒钟内为单个移动客户端提供服务。我正在寻找支持以下内容的HTTP服务器,平衡器或代理服务器:

  1. 请求到达代理。代理开始在RAM或磁盘中缓冲请求,包括头和POST / PUT主体。代理不会打开与后端服务器的连接。这可能是最重要的部分。

  2. 代理服务器在以下情况下停止缓冲请求:

    • 已达到大小限制(例如,4KB)或
    • 已完全收到请求,标题和正文
  3. 只有现在,在内存中有(部分)请求时,会向后端打开一个连接并转发请求。

  4. 后端发回响应。代理服务器再次开始立即缓冲(最大限度为64KB。)

  5. 由于代理具有足够大的缓冲区,后端响应在几毫秒内完全存储在代理服务器中,后端进程/线程可以自由处理更多请求。后端连接立即关闭。

  6. 代理以尽可能快或慢的速度将响应发送回移动客户端,而无需连接到后端占用资源。

  7. 我很确定你可以用Squid做4-6,而nginx似乎支持1-3(在这方面看起来相当独特)。我的问题是:是否有任何代理服务器同情这些缓冲和非开放连接直到准备好的功能?也许只有一点Apache config-fu使这个缓冲行为变得微不足道?它们中的任何一个都不像Squid这样的恐龙,它支持精益的单进程,异步,基于事件的执行模型吗?

    (Siderant:我会使用nginx,但它不支持分块的POST机构,因此无法为移动客户端提供服务。是便宜的50美元手机喜欢分组的POST ...叹息)

5 个答案:

答案 0 :(得分:4)

使用nginx和Squid(客户端 - Squid - nginx - 后端)怎么样?当从后端返回数据时,Squid会将其从C-T-E转换为:chunked为设置了Content-Length的常规流,因此也许它可以规范化POST。

答案 1 :(得分:2)

来自Telerik的免费工具

Fiddler至少完成了一些您正在寻找的事情。

具体来说,转到Rules | Custom Rules...,您可以在连接期间的所有点添加任意Javascript代码。您可以使用sleep()调用来模拟所需的一些内容。

然而,我不确定这种方法能为您提供所需的精细缓冲控制。还是,有些东西可能比什么都好?

答案 2 :(得分:2)

答案 3 :(得分:1)

Squid 2.7可以支持1-3补丁:

我已经对它进行了测试并发现它运行良好,条件是它只缓冲到内存,而不是磁盘(当然,除非它交换,你不想要这个),所以你需要运行它在适合您的工作量的盒子上。

对于大多数服务器和中介来说,分块POST是一个问题。你确定需要支持吗?通常客户端应该在获得411时重试该请求。

答案 4 :(得分:0)

不幸的是,我不知道现成的解决方案。在最糟糕的情况下,考虑使用Java NIO自己开发它 - 它不应该花费超过一周的时间。