PHP是一个同步执行的语言,简单来说就是代码是一行一行往下执行的,每个请求也都是一个一个的按照顺序去执行,不像ajax那样可以异步执行的机制。所以再遇到了一些需要长时间执行的程序的时候,就会造成一个结果,用户长时间的等待,没有结果返回,导致用户体验下降。类似的长时间执行的程序例如:生成大量的PDF文件,发送大量的通知操作,处理图片,访问外部API等。为了不影响主程序的进行,切提高用户体验,减少等待时间,用异步来实现这些功能,绝对是一个最好的选择,主程序继续执行,让用户完成操作,系统继续执行剩余的任务处理,例如发送通知,生成文档。
当然,PHP有一些可以实现异步的插件和框架,例如Swoole、ReactPHP等,但是今天我的项目是一个,运行了很多年的系统,且这个系统没有外部网络,无法联网安装插件,简而言之就是没法升级。
这里我想到的方法是,使用Curl来模拟异步执行,原理就是直接用Curl请求另外一个接口去执行想要执行的代码,但是我不获取它的结果,它只需要系统自动执行一边就可以了,意思就是请求完后,直接结束请求不获取返回结果,这样就可以继续执行后面的代码来实现异步。
CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数
CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数
下一篇: 移动协同签名认证实现流程