必威体育科技logo
咨询热线: 13917498722
  您的位置: 首页 > 网站资讯 > PHP 异步执行方法,模拟多线程

PHP 异步执行方法,模拟多线程

发布日期:2017/7/10 点击数:1910

PHP 自己没有多线程的东西,但可以曲线的办法来造就出同样的效果,比如多进程的体例来达到异步调用,只限于饬令模式。

另外还有一种更简单的体例可用于 Web 程序中,那就是用 fsockopen()、fputs() 来请求一个 URL, 而无需等待返回,假如你在那个被请求的页面(URL)中做些事情就相当于异步了。

关键代码如下:

<?php
$fp=fsockopen('localhost',80,&$errno,&$errstr,5);
if(!$fp){
	echo "$errstr ($errno)<br />/n"; 
}
fputs($fp,"GET another_page.php?flag=1/r/n"); 
fclose($fp);

上面的代码向页面 another_page.php 发送完请求就不管了四川做网站报名,用不着等待请求页面的响应数据,行使这一点就可以在被请求的页面 another_page.php 中异步的做些事情了。

比如,一个很切实的应用,我们每当发表了一篇新日志后需要给所有该日志的订阅者发个邮件通知, 假如按照通常的体例就是:

日志写完 -> 点提交按钮 -> 日志插入到数据库 -> 发送邮件通知 -> 告知撰写者发布成功

那么作者在点提交按钮到看到成功提醒之间可能会等待很常时间,基本是在等邮件发送的过程,比如连接邮件服务异常、或器缓慢或是订阅者太多。而现实上是不管邮件发送成功与否,保证日志保存成功基本可接受的,所以等待邮件发送的过程是很不经济的,这个过程可异步来执行,并且邮件发送的效果不太关心或以日志形式记录备查。

改进后的流程就是:

日志写完 -> 点提交按钮 -> 日志插入到数据库 ---> 告知撰写者发布成功 ---> 发送邮件通知 -> [记下日志]

写个现实的程序来测试一下上海做网站中心app应用,有两个文件,分别是 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)<br />/n";
	} 
	sleep(1); 
	fputs($fp,"GET /sendmail.php?param=1/r/n"); #请求的资源 URL 一定要写对 
	fclose($fp); 
}  
echo time().'<br>'; 
echo 'call asyn_sendmail<br>'; 
asyn_sendmail(); 
echo time().'<br>'; 

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异步调试和线上调试网站程序的方法
  • javascript 异步加载,提高网页的浏览速度
  • PHP Curl批量多线程打开网址的类
  • PHP判断服务器SSL是否启用,也就是判断是否支撑HTTPS连接
  • PHP 行使 Curl Functions 实现多线程抓取网页和下载文件
  • php获取目录所有文件并将效果保存到数组的程序
  • php行使curl实现多线程的类,php curl多线程下载图片
  • PHP行使CURL_MULTI实现多线程




  • 其他相关文章
  • 2012年十二月web设计与开发热点
  • 捂紧微信钱包,微信盗号木马来了,有人已被盗刷上万元
  • 什么缘故原由造成了网站排名的高低
  • HostEase优惠季火热开启 产品服务齐头并进
  • 2016年如何做好betway必威体育官网平台网站优化
  • css3 2d之translate属性




  • betway必威体育官网平台网站后台使用
    购物网站后台使用
    网站产品图片的处理




    售前咨询QQ: 838821345
    售后服务QQ: 464698733
    应急手机:13917498722


    微信扫一扫
    添加24小时微信客服


    邮箱:lang@MENGL.CN
    地址:上海宝山区城银路555弄2号楼3楼
    Copyright 2012-2020 上海必威体育网络科技有限公司 WWW.MENGL.CN All Rights Reserved