1、PHP 有这两个与超时相关的选项: CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 。
PHP 网站上的描述有点模糊。有什么不同?
举一个现实世界的例子:假设你通过 cURL 向一个 URL 发送 GET 变量,并且你想接收一个返回的 XML,那么 CURLOPT_CONNECTTIMEOUT 与连接到服务器和 CURLOPT_TIMEOUT 发回 XML 所需的最长时间?
回答:
CURLOPT_CONNECTTIMEOUT 是允许与服务器建立连接的最长时间(以秒为单位)。可以将其设置为 0 以禁用此限制,但这在生产环境中是不可取的。
CURLOPT_TIMEOUT 是以秒为单位的最大时间量,单个 cURL 扩展函数调用的执行将受到限制。请注意,此设置的值应包括 CURLOPT_CONNECTTIMEOUT 的值。
也就是说,CURLOPT_CONNECTTIMEOUT是CURLOPT_TIMEOUT所代表的时间段,所以CURLOPT_TIMEOUT的值应该大于CURLOPT_CONNECTTIMEOUT的值。
https://segmentfault.com/q/1010000042656838 这个ui还挺不错的
基本上连接时间涵盖了建立http连接的两个方面:
DNS解析
直到建立 tcp 连接的时间。
CURLOPT_TIMEOUT 或 CURLOPT_TIMEOUT_MS 选项根本没有涵盖这段时间。这些涵盖了在我们开始通过刚刚在连接阶段建立的 TCP 连接上的 HTTP 之后发生的所有事情。
这种区别给很多人带来了问题,但它确实允许设置一个相对较短的连接超时,因为如果服务器完全不可用,为什么还要等待呢?然而,您仍然可以让您的请求超时相当长,以防服务的预期响应时间难以预测。
通常,对于生产设置,CURLOPT_CONNECTION_TIMEOUT 应小于 5 秒,CURLOPT_TIMEOUT 应尽可能低(不会导致您定期丢弃请求)。
JSON应该始终有多维,不然以后拓展接口很麻烦
比如直接传list在外层,以后升级了,比如加个total,不好维护