利用Http请求实现PHP异步(laravel5.4)
Posted 愤怒的白炽灯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Http请求实现PHP异步(laravel5.4)相关的知识,希望对你有一定的参考价值。
前言: 继上一篇中说的第一种方法实现(自己测试用的,所以一切从简)
方法的思路:
php本身不存在异步功能,所以我们拼接出http请求以及PHP本身自带的fsockopen、fwrite方法来实现。
过程:
在Controller中创建一个方法,控制器命名为TestController,其中的代码如下(注释掉的为post请求,我们先讲get请求)
http_build_query 方法: 生成 URL-encode 之后的请求字符串(此处用来拼接我们Get请求所要发送的数据)。
fsockopen 方法(重点理解该方法,明白它的作用): 打开一个网络连接或者一个Unix套接字连接(此为手册中的描述并不容易理解)。第一个参数为主机名,如果你是在本地测试,可以像我一样给;第二个参数端口号:给服务器的80端口;
接下去的参数分别是一个存放错误编号的变量、一个存放错误信息字符串的变量和超时等待时间(此方法可以详细的去看手册上的描述以及百度上网友的理解分享)。该方法如果执行成功将会返回一个文件句柄(资源)
之后可以被其他文件类函数调用(例如:fgets(),fgetss(),fwrite(),fclose()还有feof())。如果调用失败,将返回FALSE
。
接下来就是拼接的Get请求, 其中的Url即是该http请求请求得路径,该请求执行的方法如下,该方法向一个文件中写入拼接的字符串(此处没有贴出发送邮件的代码,只需要将此处的内容换成发送邮件以及一系列处理的代码即可)
在浏览器中执行第一个路由,完成后马上会看到页面显示的执行完毕,并且文件中有了写入的字符串,这表示我们的PHP异步Get请求成功了,但是使用get请求发送邮件是不合适的,因为他不能携带太多数据,而邮件的内容有可能包含大量的数据
所以我们还是需要使用post请求(由于本人的post请求一直不能正常执行成功,并且还未能找到原因,所以不多做阐述,解决了问题便会补上)。
总结:
http请求通过fsockopen打开的socket通道利用流的形式发送了请求,并在后台执行,但是这样做的弊端就是我们没办法对其进行监控,只能将想要的结果存到数据库等,然后再在其它页面查看记录的结果
以上纯属个人理解,紧当笔记使用。
以上是关于利用Http请求实现PHP异步(laravel5.4)的主要内容,如果未能解决你的问题,请参考以下文章