赞
踩
CURLOPT_TIMEOUT
好理解,就是整个curl请求过程(http request & response)的超时限制,以秒为单位,设置为0则无限制。
CURLOPT_CONNECTTIMEOUT
比较难理解,目前确认的是,这是curl请求过程中的一小部分,因此必须要设得比CURLOPT_TIMEOUT
小,不然CURLOPT_TIMEOUT
无意义。网上的资料是这么说的:
CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。
这个发起连接前等待的时间
比较模糊,我倾向于这指的是完成TCP三次握手
过程前所耗费的时间,或者换句话说,TCP三次握手
的整个过程必须要在CURLOPT_CONNECTTIMEOUT
内完成,否则就超时。TCP三次握手
无法在指定时间内完成表示服务器正处在繁忙/奔溃的状态或网络异常,这正符合本文所提到的场景。
基于这一猜想下,我把CURLOPT_CONNECTTIMEOUT
设成3秒:
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 3);
如此,就不需要在网络抖动的时候等待2分钟(SDK设定的CURLOPT_CONNECTTIMEOUT
是120秒)才报错了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。