PHP异步执行方法,模拟多线程_PHP教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP异步执行方法,模拟多线程_PHP教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2543字,纯文字阅读大概需要4分钟。
内容图文
![PHP异步执行方法,模拟多线程_PHP教程](/upload/InfoBanner/zyjiaocheng/185/d76e25132c4d45739d077b9eaff3ce68.jpg)
PHP 异步执行方法,模拟多线程
PHP 本身没有多线程的东西,但可以曲线的办法来造就出同样的效果,比如多进程的方式来达到异步调用,只限于命令模式。
另外还有一种更简单的方式可用于 Web 程序中,那就是用 fsockopen()、fputs() 来请求一个 URL, 而无需等待返回,如果你在那个被请求的页面(URL)中做些事情就相当于异步了。
关键代码如下:
<?php $fp=fsockopen('localhost',80,&$errno,&$errstr,5); if(!$fp){ echo "$errstr ($errno)
/n"; } fputs($fp,"GET another_page.php?flag=1/r/n"); fclose($fp);
上面的代码向页面 another_page.php 发送完请求就不管了,用不着等待请求页面的响应数据,利用这一点就可以在被请求的页面 another_page.php 中异步的做些事情了。
比如,一个很切实的应用,我们每当发表了一篇新日志后需要给所有该日志的订阅者发个邮件通知, 如果按照通常的方式就是:
日志写完 -> 点提交按钮 -> 日志插入到数据库 -> 发送邮件通知 -> 告知撰写者发布成功
那么作者在点提交按钮到看到成功提示之间可能会等待很常时间,基本是在等邮件发送的过程,比如连接邮件服务异常、或器缓慢或是订阅者太多。而实际上是不管邮件发送成功与否,保证日志保存成功基本可接受的,所以等待邮件发送的过程是很不经济的,这个过程可异步来执行,并且邮件发送的结果不太关心或以日志形式记录备查。
改进后的流程就是:
日志写完 -> 点提交按钮 -> 日志插入到数据库 ---> 告知撰写者发布成功 ---> 发送邮件通知 -> [记下日志]
写个实际的程序来测试一下,有两个文件,分别是 write.php 和 sendmail.php,在 sendmail.php 用 sleep(seconds) 来模拟程序执行所使用时间。
write.php,执行耗时 1 秒:
<?php function asyn_sendmail(){ $fp=fsockopen('localhost',80,&$errno,&$errstr,5); if(!$fp){ echo "$errstr ($errno)
/n"; } sleep(1); fputs($fp,"GET /sendmail.php?param=1/r/n"); #请求的资源 URL 一定要写对 fclose($fp); } echo time().'
'; echo 'call asyn_sendmail
'; asyn_sendmail(); echo time().'
';
sendmail.php,执行耗时 10 秒:
<?php sleep(10); fopen("C:/".time(),"w");
通过页面访问 write.php,页面输出:
1272472697
call asyn_sendmail
1272472698
并且在 C:/ 生成文件:
1272472708
从上面的结果可以看出 sendmail.php 至少花费 10 秒,但不会阻塞 write.php 继续往下执行,表明这一过程是异步的。
您可能感兴趣的文章
- php异步调试和线上调试网站程序的方法
- PHP Curl批量多线程打开网址的类
- Javascript 异步加载,提高网页的浏览速度
- PHP利用CURL_MULTI实现多线程
- php获取目录所有文件并将结果保存到数组的程序
- PHP 利用 Curl Functions 实现多线程抓取网页和下载文件
- php利用curl实现多线程的类,php curl多线程下载图片
- php如何将html中的br换行符转换为文本输入中的换行符
http://www.bkjia.com/PHPjc/892342.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/892342.htmlTechArticlePHP 异步执行方法,模拟多线程 PHP 本身没有多线程的东西,但可以曲线的办法来造就出同样的效果,比如多进程的方式来达到异步调用,只...
内容总结
以上是互联网集市为您收集整理的PHP异步执行方法,模拟多线程_PHP教程全部内容,希望文章能够帮你解决PHP异步执行方法,模拟多线程_PHP教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。