Maison  >  Article  >  développement back-end  >  Exemple de code PHP utilisant curl pour simuler des requêtes multithread

Exemple de code PHP utilisant curl pour simuler des requêtes multithread

不言
不言avant
2018-11-17 17:19:252177parcourir

Le contenu de cet article concerne l'exemple de code de PHP utilisant curl pour simuler le multi-threading pour envoyer des requêtes. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

L'exécution de chaque fichier PHP est monothread, mais PHP lui-même peut également utiliser d'autres technologies pour obtenir une concurrence multithread, comme l'utilisation du processus php-fpm ici, curl est utilisé pour. simuler des requêtes d'envoi multithread. Le multi-threading curl de PHP obtient du contenu en appelant continuellement curl_multi_exec. Voici une démo pour simuler une opération simultanée multi-thread curl.

//设置缓冲为0(也可以去php.ini设置)
ini_set('output_buffering', 0);
//打开输出缓冲区
ob_start();
//设置一个空数组
$curl_Arr=[];
//这里模拟20次请求
for($i=0;$i<20;$i++){
    //开启curl连接
    $curl_Arr[$i]=curl_init("http://XXXX/test.php");
    //CURLOPT_RETURNTRANSFER 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE;
    curl_setopt($curl_Arr[$i],CURLOPT_RETURNTRANSFER,1);
}

//创建批处理cURL句柄
$mh = curl_multi_init();

foreach($curl_Arr as $k => $ch){
    //curl句柄入栈增加
    curl_multi_add_handle($mh,$ch);
}
$active = null;
while(count($curl_Arr)>0){
    //发起curl_multi请求
    @curl_multi_exec($mh,$active);
    foreach($curl_Arr as $k => $ch){
        //获取句柄的返回值
        if($result[$k]= curl_multi_getcontent($ch)){
            //输出结果
            echo "$result[$k]\n";
            ob_flush();
            //把被释放的数据发送到浏览器
            flush();
            //关闭该句柄
            curl_multi_remove_handle($mh,$ch);
            unset($curl_Arr[$k]);
        }
    }
}
//关闭ouput_buffering机制
ob_end_flush();
//关闭"curl_mulit"句柄
curl_multi_close($mh);

J'ai créé une page php demandée sur le serveur et je l'ai nommée test.php avec le contenu suivant :

1 sleep(10);
2 echo &#39;seccess&#39;;exit;

signifie attendre dix secondes pour la déclaration suivante.

Ensuite, j'ai exécuté le programme sur la ligne de commande et le résultat était le suivant :

Dans le code ci-dessus, curl_multi_getcontent est appelé en parcourant le $ Tableau curl_Arr pour demander s’il existe des données. S'il y a des données, affichez et supprimez les éléments jusqu'à ce que le nombre d'éléments dans le tableau $curl_Arr atteigne 0.

Cette implémentation multithread simulée peut réaliser cette fonction en utilisant la série de fonctions curl_multi de curl. Quant à l'introduction à l'utilisation de cette série de fonctions, vous pouvez effectuer de nombreuses recherches sur Baidu. Aucune explication ne sera donnée ici.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer