V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
t333st
V2EX  ›  PHP

使用 curl_multi_exec 的疑问

  •  
  •   t333st · 2017-09-04 15:05:19 +08:00 · 3538 次点击
    这是一个创建于 2639 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在写一个小东西做请求并发,用到 curl_multi_exec,发现个别 url 超时很久的时候,后丢失后面一部分 url

    即加入我有 20 条 urls 并发请求时,前面 15 条响应很快,但是后面的 5 条因为该 url 的服务器问题,timeout 时间特别长,所以返回的这堆数据中,大概只能拿到 16 或 17 条 urls 的数据,后面都丢失了

    不知大家有无遇到过这种情况?可有解决方法? 代码太乱,就先不贴了

    7 条回复    2017-09-05 12:47:35 +08:00
    fcka
        1
    fcka  
       2017-09-04 15:13:58 +08:00 via Android
    PHP 默认执行时长限制为 30 秒
    t333st
        2
    t333st  
    OP
       2017-09-04 15:48:01 +08:00
    @fcka 通过终端脚本调用也是。。。
    也设置了
    CURLOPT_CONNECTTIMEOUT => 0,
    CURLOPT_TIMEOUT => 60,
    2ME
        3
    2ME  
       2017-09-04 15:52:01 +08:00
    减少并发条数试试
    1010011010
        4
    1010011010  
       2017-09-04 20:33:02 +08:00
    大概是慢的那个服务器顶不住 5 次同时请求,只响应了一两条,其他的丢了
    gouchaoer
        5
    gouchaoer  
       2017-09-04 23:22:32 +08:00 via Android
    用 guzzle 的并发,它包装的 multi_curl_*接口
    t333st
        6
    t333st  
    OP
       2017-09-05 09:28:38 +08:00
    @gouchaoer 咦,这个好像不错
    lanwairen123
        7
    lanwairen123  
       2017-09-05 12:47:35 +08:00 via Android
    最近发现 php-curlmulti 很不错,用它的并发跑满了我 50m 的带宽,他封装的 multi_curl,接口比较简单,https://github.com/ares333/php-curlmulti
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1046 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:37 · PVG 03:37 · LAX 11:37 · JFK 14:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.