• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2018-06-21) 124次浏览 已收录 0个评论

php 本身没有多线程的东西,但可以曲线的办法来造就出同样的效果,比如多进程的方式来达到异步调用,只限于命令模式。

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

关键代码如下:

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

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

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

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

改进后的流程就是:

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

写个实际的程序来测试一下,有两个文件,分别是 write.php 和 sendmail.php,在 sendmail.php 用 sleep(seconds) 来模拟程序执行所使用时间。

write.php,执行耗时 1 秒:

sendmail.php,执行耗时 10 秒:

通过页面访问 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实现多线程

欢迎大家阅读《PHP 异步执行方法,模拟多线程_php》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址