【问题标题】:How to CURL and avoid timeout death (Twitter Down)如何卷曲并避免超时死亡(Twitter Down)
【发布时间】:2012-06-24 00:56:19
【问题描述】:

Twitter 目前已关闭,我网站的一个主页依赖于从 Twitter 获取数据(依赖是问题所在 - 它应该更多是一个附属功能,因为它只是显示来自其供稿的关注数)。

这是有问题的代码:

function socials_Twitter_GetFollowerCount($username) {
    $method = function () use ($username) { return file_get_contents('https://api.twitter.com/1/users/show.json?screen_name='.$username.'&include_entities=true'); };
    $json = cache('bmdtwitter', 3600, $method, false);
    $json = json_decode($json, true);

    return intval($json['followers_count']);
}

有什么好的方法可以做到这一点,如果 Twitter 关闭(或在一段合理的时间内没有响应),我们的网站似乎没有关闭(我认为超时可能默认为 30-60 秒或更多)。

【问题讨论】:

  • 我认为一个好的开始是考虑将工作卸载到每小时(或类似)运行的 cron 任务以获取最新数据,然后可能将其存储在数据库中并从中提取。这是一个坏主意 - 有更好的解决方案吗?
  • 我认为 cron 解决方案是有道理的,而且可能一天只有几次。除非追随者的数量迅速变化了一个数量级。只是好奇,为什么有 memcached 标签而没有 php 标签?
  • 非常公平的问题,Spaceghost... 我应该在 StackOverflow 上发布这个开始(然后我会想到 PHP),但出于某种原因,我认为它在 Web 开发部分是有意义的。我会更新标签...我想我会选择 cron 解决方案并将我们的答案作为解决方案发布。谢谢!

标签: php twitter cron memcached


【解决方案1】:

您可以向file_get_contents 请求添加上下文并指定超时,以便在请求未在该时间内完成时退出。如果您直接在页面加载时进行轮询,您可能需要考虑一个非常低的超时时间,例如 2-3 秒左右,因为大多数请求应该在此时间限制内完成。

更好的选择是通过 cron 进行获取并让您的网页使用缓存的数据,但这里是使用 file_get_contents 设置超时的示例。

function socials_Twitter_GetFollowerCount($username) {
    $method = function () use ($username) {
        $opts = array('http' =>
            array(
                'timeout' => 3
            )
        );
        $context = stream_context_create($opts);

        return file_get_contents('https://api.twitter.com/1/users/show.json?screen_name='.$username.'&include_entities=true', false, $context);
    };

    $json = cache('bmdtwitter', 3600, $method, false);
    $json = json_decode($json, true);

    return intval($json['followers_count']);
}

请参阅file_get_contents()stream_context_create()Context options and parameters

【讨论】:

  • 谢谢德鲁,好主意!我最终通过后台 cron 任务使用了缓存选项。不过,file_get_contents 的超时选项是另一个很好的解决方案,特别是如果我想坚持使用直接的内存缓存解决方案。
猜你喜欢
  • 2010-09-13
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 2018-02-22
  • 2013-06-07
相关资源
最近更新 更多