【发布时间】:2010-11-03 12:03:02
【问题描述】:
由于今天 twitter 宕机,我一直在思考如何在它宕机时最好地处理对 API 的调用。如果我使用 CURL 调用他们的 api,我如何使脚本快速失败并处理错误,以免降低应用程序的速度?
【问题讨论】:
由于今天 twitter 宕机,我一直在思考如何在它宕机时最好地处理对 API 的调用。如果我使用 CURL 调用他们的 api,我如何使脚本快速失败并处理错误,以免降低应用程序的速度?
【问题讨论】:
curl_setopt($yourCurlHandle, CURLOPT_CONNECTTIMEOUT, '1'); // 1 second
如果您使用 curl >= 7.16.2 和 PHP >= 5.2.3,则有 CURLOPT_CONNECTTIMEOUT_MS
【讨论】:
if ($result = curl_exec($resource)) { ... } else { ... }
使用 curl_getinfo 获取 cURL 响应代码或内容长度并检查这些内容。
$HttpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
【讨论】:
也许使用一种缓存来判断 twitter 是打开还是关闭。在数据库或服务器端文件中记录来自 api 的无效响应。一旦您连续收到两个/三个/一些其他数量的无效响应,请在 x 时间内禁用对 api 的所有请求。
在 x 时间后,尝试请求,如果仍然关闭,请再次禁用 x 分钟。
如果您的服务器可以运行 CRON 作业,请考虑制作一个脚本,每隔几分钟检查一次 API 是否有有效响应。如果它发现它已关闭,请禁用请求,直到它备份。至少在这种情况下,服务器将进行测试,用户不必成为豚鼠。
【讨论】: