HTTP请求的keep_alive和persistent选项有什么区别?

时间:2011-01-12 17:36:40

标签: php http zend-framework http-headers

有人可以向我们解释以下参数之间的行为差​​异:

Zend_Http_Client类中的

keep_alive 参数?

Zend_Http_Client_Adapter_Socket类中的

持久性

我想了解我需要做些什么来保持一堆HTTPS连接打开(以避免SSL的关联)。

谢谢, 加斯

3 个答案:

答案 0 :(得分:1)

如果你使用持久连接,你也应该使用keep-alive,因为没有保持Alive HTTP 1.1连接你的 persitent 将需要做很多工作来模拟这项工作。

编辑:(是时候吃饭了)

Keepalive 设置会讨论由服务器设置的非常短时间设置。对于Keep-Alive请求,Apache默认处理 15s ,但当前优化设置为5秒。这主要是为了帮助HTTP客户端下载附加到同一HTTP连接中的页面的js和css。如果您可以调整服务器设置,您可以尝试最长的Keep-Alive查询(但要小心,这将严重限制服务器加入的客户端数量。)

持久连接模式是为了真正模拟长期持久连接,打开的套接字在脚本结束时不会关闭。你应该非常小心这样的设置。你在CLI模式吗? FCGI?如果你在apache进程中运行,我真的不确定你会在下一个请求上获得相同的连接(这可能会被另一个apache进程处理),如果你的代码运行起来甚至更糟大型部署中的几个apache服务器。这适用于客户端(PHP)方面,但它对目标服务器来说也是一个巨大的痛苦。

重新编辑 :(必须说一些关于SSL的内容)

您确定需要优化SSL协商时间吗? SSL使用Cache(至少在服务器端)将限制限制为第一个请求。 SSL会话的客户端缓存可能由PHP stream_socket_client 函数(由Zend类使用)完成。如果不是,您可以自己测试一个新类(只需要实现该接口)和尝试使用curl,因为curl默认使用SSL会话缓存。

答案 1 :(得分:0)

KeepAlive意味着连接可以在单个请求的过程中重复使用,但它会在请求结束时关闭。持久意味着连接将在单个请求之后生存,以便后续请求在同一PHP进程中使用。

答案 2 :(得分:0)

仅供参考,虽然keep-alive应该重用HTTP连接,但适配器类(至少最近为1.10)无法正确处理此问题,并且无论标志如何都会打开新连接。

相关问题