码迷,mamicode.com
首页 > Web开发 > 详细

利用Http请求实现PHP异步(laravel5.4)

时间:2017-11-15 21:53:11      阅读:23      评论:0      收藏:0      [点我收藏+]

标签:数据   fclose   net   调用   href   gets   发送邮件   style   eof   

 前言: 继上一篇中说的第一种方法实现(自己测试用的,所以一切从简)

 

 方法的思路:

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)

标签:数据   fclose   net   调用   href   gets   发送邮件   style   eof   

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!