简体   繁体   English

PHP Curl 在线程中重复使用

[英]PHP Curl Reuse In Thread

i wanted perform curl reuse in thread like here: PHP Curl Reuse Optimization我想像这里一样在线程中执行 curl 重用: PHP Curl 重用优化
but when i executed this code:但是当我执行这段代码时:

//main code
$n=0;
$app = [];

$app_default = new WebRequest();

for ($n = 0; $n < 50; $n++){

    $app[$n] = $app_default;
    $app[$n] -> start();

}
//
//base thread class
class WebRequest extends Thread {


    public function run() {
        $this->executeREUSEGET();
    }

        private $ch = null;

        function executeREUSEGET()
        {
            if ($this->ch == null) {
                $this->ch = curl_init();
                curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, "GET");
                curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($this->ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
                curl_setopt($this->ch, CURLOPT_ENCODING, '');
            }
            curl_setopt($this->ch, CURLOPT_URL, 'https://www.google.com/');

            /* Result handling and processing */
            $result = curl_exec($this->ch);
            return $result;
        }
    
}

get these errorrs:得到这些错误:

PHP Fatal error:  Uncaught RuntimeException: the creator of WebRequest already started it in D:\req.php:71

how can i solve this?我该如何解决这个问题?

i dont want to execute curl_unit() & curl_setopt() in every request in loop.bcz it gets slow down...我不想在 loop.bcz 中的每个请求中执行 curl_unit() 和 curl_setopt() 它会变慢......
actually i wanna send curl request in a while loop in pthread and bcz speed is so important for me i dont need to initialize curl in every request(url and curl_setopt are static).it reduce speed.实际上,我想在 pthread 的 while 循环中发送 curl 请求,bcz 速度对我来说非常重要,我不需要在每个请求中初始化 curl(url 和 curl_setopt 是静态的)。它会降低速度。

i found this code but work only one time.it means only get site contents for once:((我找到了这段代码,但只工作了一次。这意味着只获取网站内容一次:((

$appa = new Atomic();
$ok = $appa -> inc();
//
$n=0;
$app = [];
//
for ($n = 0; $n < 50; $n++){

    $app[$n] = new WebRequest($ok);
    $app[$n] -> start();

}
///
class WebRequest extends Thread {
    
    public $ch;

    public function __construct($ch) {
        $this->ch = $ch;
    }
    
    public function run() {
            $result = curl_exec($this->ch);
            echo $result;
    }

}
///
class Atomic extends Threaded {

    public function inc() {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
            curl_setopt($ch, CURLOPT_ENCODING, '');
            curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
            return $ch;
    }

    
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM