php完成并发的办法:起首写好针对第三方的申请接口;而后应用并发申请这些第三方的接口,并发代码如“function request(){...}”;最初应用php完成轮回申请接口便可。
保举:《PHP视频教程》
php完成并发
应用场景
假如你第三方的多个接口,需求轮回申请,这时候候就需求并发解决,由于 php 是单过程,程序执行的顺序,假如有一个接口挂了,那末前面的接口也不克不及失去申请,或许某个接口期待工夫太长,上面的接口也需求期待工夫,那末十多个接口每一个接口期待1S,十个接口就需求10S能力实现一次申请。这时候候,就需求应用并发申请
应用计划
能够先写好针对某个第三方的申请接口,而后应用并发申请这些第三方的接口
并发代码
function request(){ $srart_time = microtime(TRUE); $webSiteUrl = 'http://test/'; /** * 结算 */ $alls = [ $webSiteUrl . "1.php", $webSiteUrl . "2.php", ]; //1 创立批解决cURL句柄 $chHandle = curl_multi_init(); $chArr = []; //2.创立多个cURL资本 foreach ($alls as $Url) { $chArr[$Url] = curl_init(); curl_setopt($chArr[$Url], CURLOPT_URL, $Url); curl_setopt($chArr[$Url], CURLOPT_RETURNTRANSFER, 1); curl_setopt($chArr[$Url], CURLOPT_TIMEOUT, 1); curl_multi_add_handle($chHandle, $chArr[$Url]); //2 添加句柄 } $active = null; /**常量 * CURLM_CALL_MULTI_PERFORM==-1 * // CURLM_OK == 0 **/ do { $mrc = curl_multi_exec($chHandle, $active); //3 执行批解决句柄 } while ($mrc == CURLM_CALL_MULTI_PERFORM); //4 //4 $active 为true,即$chHandle批解决之中另有$ch句柄正待解决,$mrc==CURLM_OK,即上一次$ch句柄的读取或写入曾经执行终了。 while ($active && $mrc == CURLM_OK) { if (curl_multi_select($chHandle) != CURLM_CALL_MULTI_PERFORM) {//$chHandle批解决中另有可执行的$ch句柄,curl_multi_select($chHandle) != -1顺序加入梗阻状态。 do { $mrc = curl_multi_exec($chHandle, $active);//持续执行需求解决的$ch句柄。 } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } foreach ($chArr as $k => $ch) { // $result[$k] = curl_multi_getcontent($ch); //5 猎取句柄的前往值,没有需求 curl_multi_remove_handle($chHandle, $ch);//6 将$chHandle中的句柄移除了 } curl_multi_close($chHandle); //7 封闭全副句柄 $end_time = microtime(TRUE); echo sprintf("use time:%.3f s", $end_time - $srart_time); }
php 完成轮回申请接口
这类状况针对的是轮回需求正在1S内执行的顺序,假如执行频次超越1S,则间接应用linux 的方案义务便可
// 无工夫限度执行此顺序 set_time_limit(0); // 设置默许时区 北京工夫 date_default_timezone_set('PRC'); do { // 假如没有存正在 stop 文件,则顺序中止 而且记载中止工夫 if (!file_exists(dirname(__FILE__) . '/stop')) { $handle = fopen('./ceshi.log', 'a+'); fwrite($handle, '顺序中止工夫: ' . date('Y-m-d H:i:s') . "\n"); fclose($handle); exit(); } sleep(4); try { requestNewOpen(); } catch (Exception $exception) { $handle = fopen('./ceshi.log', 'a+'); fwrite($handle, 'catch : ' . $exception->getMessage() . "\n"); fclose($handle); } } while (true);
以上就是php若何完成并发的具体内容,更多请存眷资源魔其它相干文章!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
抱歉,评论功能暂时关闭!