php实现异步数据调用的方法_php技巧
浏览器和服务器之间只有一种面向无连接的HTTP协议进行通讯的,面向无连接的程序的特点是客户端请求服务端,服务端根据请求返回相应的程序,不能保持持久连接。这样就出现了一个问题,一个客户端的相应服务端可能执行1秒也有可能执行1分钟,这样浏览器就会一直处于等待状态,如果程序执行缓慢,用户可能就没耐心关掉了浏览器。 而有的时候我们不需要关心程序执行的结果,没有必要这样浪费时间和耐心等待,那我们就要想出办法让程序不收等待在后台静默执行。比如现在有一个场景,给1000个用户发送一封推荐邮件,用户输入或者导入邮件账号了提交服务器执行发送。 <?php $count = count($emailarr);for($i =0; $i < $count; $i++) { sendmail();//发送邮件 } ?> 这段代码用户体验极差,也无法实际运用,首先发送这么多邮件会产生服务器运行超时,其实漫长的用户等待时间会让用户对系统产品怀疑和失去信心。但是用户不需要等待到1000封邮件都发送完毕了才提交发送成功,我们完全可以提交后台后直接给用户提示发送成功,然后让后台程序静默依次发送。
PHP异步执行的常用方式 $ch = curl_init();$curl_opt = array(CURLOPT_URL, 'http://www.example.com/backend.php', CURLOPT_RETURNTRANSFER, 1, CURLOPT_TIMEOUT, 1,); curl_setopt_array($ch, $curl_opt);curl_exec($ch);curl_close($ch); 使用CURL需要设置CUROPT_TIMEOUT为1(最小为1,郁闷)。也就是说,客户端至少必须等待1秒钟。 $fp = fsockopen(www.jb51.net, 80, $errno, $errstr, 30);if (!$fp) { echo "$errstr ($errno)<br />/n";} else { $out = "GET /backend.php / HTTP/1.1/r/n"; $out .= "Host: www.jb51.net/r/n"; $out .= "Connection: Close/r/n/r/n"; fwrite($fp, $out); /*忽略执行结果 while (!feof($fp)) { echo fgets($fp, 128); }*/ fclose($fp);} 以上就是为大家分享的4种PHP异步执行的常用方式,希望对大家的学习有所帮助。 |