利用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通道利用流的形式发送了请求,并在后台执行,但是这样做的弊端就是我们没办法对其进行监控,只能将想要的结果存到数据库等,然后再在其它页面查看记录的结果

以上纯属个人理解,紧当笔记使用。

转载于:https://www.cnblogs.com/cyclzdblog/p/7840450.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值