Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么';HTTP请求的keep_alive和persistent选项之间的区别是什么?_Php_Http_Zend Framework_Http Headers - Fatal编程技术网

Php 什么';HTTP请求的keep_alive和persistent选项之间的区别是什么?

Php 什么';HTTP请求的keep_alive和persistent选项之间的区别是什么?,php,http,zend-framework,http-headers,Php,Http,Zend Framework,Http Headers,有人能解释一下以下参数之间的行为差异吗: Zend_Http_客户端类中的keep_alive参数 及 Zend_Http_客户端_适配器_套接字类中的持久性 我想了解我需要做什么来保持一组HTTPS连接打开(以避免SSL的协商) 谢谢, GastonKeepAlive意味着连接可以在单个请求过程中重复使用,尽管它将在请求结束时关闭。持久性意味着连接将在单个请求之外继续存在,以便被同一PHP进程上的后续请求使用。如果使用持久性连接,您也应该使用保持活动连接,因为如果没有保持活动HTTP 1.1连

有人能解释一下以下参数之间的行为差异吗:

Zend_Http_客户端类中的keep_alive参数

Zend_Http_客户端_适配器_套接字类中的持久性

我想了解我需要做什么来保持一组HTTPS连接打开(以避免SSL的协商)

谢谢,
Gaston

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

如果使用持久性连接,您也应该使用保持活动连接,因为如果没有保持活动HTTP 1.1连接,您的持久性将不得不做大量工作来模拟作业

编辑:(该吃饭了)

Keepalive设置指由服务器设置的相当短的时间设置。Apache默认处理保持活动的请求15s,但当前的优化设置是5s。这主要是为了帮助HTTP客户端下载附加到同一HTTP连接中的页面上的js和css。如果可以调整服务器设置,则可以尝试最长的保持活动查询(但请小心,这将严重限制服务器访问的客户端数量)

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

重新编辑:(必须说明SSL)


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

FYI,而keep-alive应该重用HTTP连接,适配器类(至少最近是1.10)无法正确处理此问题,并会打开一个新连接,而不考虑标志。

听起来您希望持久化。这是不准确的。保持活动意味着您可以向同一服务器发出多个请求(假设它使用HTTP/1.1)使用相同的连接。但是,如果您不快速发出请求,服务器将关闭连接。