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

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

  • 相关阅读:
    论球迷和程序员
    山哥,你是怎么提高设计能力的?
    一个想休息的线程:JVM到底是怎么处理锁的?怎么不让我阻塞呢?
    由“面经”引发的思考
    99%的创业公司都不值得加入
    大牛是怎么炼成的?
    RMQ问题 与众不同 尚未攻克
    YbtOj例题:二叉堆3 龙珠游戏
    离散化模板
    YbtOJ练习:广搜 3 追捕小狗
  • 原文地址:https://www.cnblogs.com/cyclzdblog/p/7840450.html
Copyright © 2011-2022 走看看