php实现异步任务,php实现异步操作,后台执行耗时后台任务。

本文探讨了一种使用fsockopen()函数在PHP中实现异步GET请求的方法,指出这种方法在处理大量后台耗时任务时效率较高。通过与通过系统命令后台启动PHP进程的方式对比,展示了fsockopen()的高效性能。文章提供了代码示例,并通过执行时间对比证明了fsockopen()的优势。
摘要由CSDN通过智能技术生成

[php]<?php

/**

* 实现一个异步的get效果,在处理大量后台耗时任务的时候可以用到,网上搜索PHP异步任务也会有几种方法,

* 但这种确实是效率最高的了。

*

*/

function get($url=”,$data=”){

$out = "GET /echo.php HTTP/1.1\r\n";

$out .= "Host: localhost\r\n";

$out .= "Connection: Close\r\n\r\n";

$fp = fsockopen("localhost", 80, $errno, $errstr, 30);

if (!$fp) {

echo "$errstr ($errno)
\n";

} else {

fwrite($fp, $out);

//忽略执行结果

//while (!feof($fp)) {

//echo fgets($fp, 128);

//}

fclose($fp);

}

}

$t1 = microtime(true);//

get();

echo microtime(true) – $t1;

echo ‘
’;

$t2 = microtime(true);//

/**

*这是在一个框架里面看到的方法,通过在调用系统命令后台启动一个PHP程序,但本身这些命令都是阻塞的

* 在windows 下通过在要执行的命令前面 加上 start /b 来达到后台执行的目的

* 在linux 下通过在执行的命令后面加 &

*

* 框架里面还有下面这么一串代码,不知道在windows linux 下使用不同的函数有什么区别。

*

* if($background){

*if(self::isWin()){

*//return pclose(popen($cmd, "r"));

*$this->_run_popen($cmd, false, ‘r’, true);

*//return $this->_run_system($cmd, false);

*}else{

*return $this->_run_system($cmd, false);

*}

*}else{

*return $this->_run_exec($cmd, false);

*}

*/

popen(‘start /b c:/wamp/bin/php/php5.4.16/php C:/wamp/www/echo.php’,’r’);

//popen(‘& c:/wamp/bin/php/php5.4.16/php C:/wamp/www/echo.php’,’r’);

echo microtime(true) – $t2;

/**

*

* 通过两种的方法对比,还是使用fsockopen()效率最高。

* 可以查看下面三次执行效果,很明显fsockopen()效率是最高的。

*

* 0.010668039321899 0.00089812278747559 0.0015311241149902

* 0.046630144119263 0.043296813964844 0.54633402824402

*

*

*/

?> [/php]

php实现异步操作,后台执行耗时后台任务。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值