php多线程请求示例代码

涛哥 PHP代码

PHP 本身并不支持多线程,但可以通过多进程的方式模拟多线程请求。下面是一个使用 PHP 多进程实现多线程请求的示例代码:

<?php
$urls = array(
    'https://www.example.com',
    'https://www.example.net',
    'https://www.example.org'
);

// 定义一个匿名函数,用于发送 HTTP 请求并返回响应内容
$request = function($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
};

// 开启多进程处理请求
$results = array();
foreach ($urls as $url) {
    $pid = pcntl_fork();
    if ($pid == -1) {
        die('多进程创建失败!');
    } elseif ($pid == 0) {
        // 子进程中执行请求并获取结果
        $results[$url] = $request($url);
        exit(); // 子进程执行完毕后退出
    }
}

// 等待所有子进程执行完毕
while (pcntl_waitpid(0, $status) != -1) {
    $status = pcntl_wexitstatus($status);
}

// 输出所有请求结果
foreach ($results as $url => $result) {
    echo "请求 {$url} 的结果是:\n";
    echo $result . "\n";
}
?>

在这个php多线程请求示例代码中,我们首先定义了一个需要请求的 URL 列表 $urls。然后,我们定义了一个匿名函数 $request,用于发送 HTTP 请求并返回响应内容。

接下来,我们通过循环遍历 $urls 列表,对每个 URL 启动一个子进程,使用 $request 函数发送 HTTP 请求并获取响应结果。每个子进程执行完毕后会立即退出。

最后,我们通过 pcntl_waitpid() 函数等待所有子进程执行完毕,并使用 $results 数组保存所有请求结果。最后,我们遍历 $results 数组输出所有请求结果。

需要注意的是,使用多进程进行多线程请求可能会产生更多的系统开销和负载,并且可能会影响服务器的性能。因此,在实际生产环境中,需要根据具体情况选择合适的并发处理方式。