首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将curl_multi_exec节流到3-4进程,而不是所有进程,而不需要退出循环。

将curl_multi_exec节流到3-4进程,而不是所有进程,而不需要退出循环。
EN

Stack Overflow用户
提问于 2014-09-29 15:59:57
回答 1查看 1.6K关注 0票数 2

我似乎是崩溃了,我的网站要求太多的连接一次(600~),我想把这个节流回到可能3-4个连接,睡到免费,然后添加更多的需要。

我想要用的代码是..。

代码语言:javascript
复制
// execute the handles
$running = null;
do
{

    if ($running <= 4) curl_multi_exec($mh, $running); //add handle

    usleep(100); //sleep 

} while($running > 0);

我不认为这样做是正确的/明智的方式,但谁能推荐一个更好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-22 04:56:31

PHP 5.5中的本机解决方案

有一个选项可以限制PHPPH5.5中使用>=的连接数和CURLMOPT_MAXCONNECTS选项。

http://php.net/manual/en/function.curl-multi-setopt.php

CURLMOPT_MAXCONNECTS

传递一个数字,该数字将用作libcurl可能缓存的同时打开的连接的最大数量。默认值为10。当缓存已满时,curl关闭缓存中最老的一个,以防止打开连接的数量增加。

例如:

代码语言:javascript
复制
curl_multi_setopt ( $mh , CURLMOPT_MAXCONNECTS, 4);

注意-据报道,CentOS上存在稳定性问题,PHP5.5或更高版本是必需的。

回答你关于理智的问题

你这样做原则上是理智的..。但很容易陷入无限循环。

请注意,$running只在调用curl_multi_exec($mh, $running)时才更新,因为$running作为引用变量传递给curl_multi_exec;

解决方案

试试这些免费的库,它们可以轻松地完成你想要做的事情。

  1. RollingCURL:https://github.com/takinbo/rolling-curl
  2. 口吻-使用池:http://guzzle.readthedocs.org/en/latest/quickstart.html#concurrent-requests

它们都经过了很好的测试,并且都具有最大的连接能力。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26104064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档