• 网站新版上线,欢迎吐槽

网站技术:PHP多线程调用API

网站技术 admin 550次浏览 0个评论 扫描二维码

 用php做开发的同学,推荐一个扩展,pecl_http,对http请求的相关操作做了良好的封装,也实现了同步调用多个api,使用很方便,感兴趣的可以看一下http://www.php.net/manual/zh/class.httprequestpool.php

 

问题:

当一个PHP页面需要调用多个外部API,如何才能提高性能,减少页面加载时间?

方案选择:

API同步请求

     页面顺序依次调用API,加起来的总时长很容易超过2s,严重影响用户体验;

在服务器端实现API异步请求

         通过并行请求,页面加载时长等于几个API调用中最耗时的那个API,从而可以大幅降低页面加载时间

          在前端通过AJAX方式实现异步请求

这种方式也可以大幅降低页面加载时间,但部分重要数据因为展现完整性要求,不能等页面显示后再动态加载。

通过在页面中混合使用23方案,将会给页面加载速度和用户体验带来更好的提升,下来重点解释方案2PHP多线程调用API的实现。

PHP语言本身并不能像js那样具备异步回调的特性,要想实现异步请求的功能,需要用到libcurl库,需要用到curl_multi_*相关的一些PHP函数,

具体步骤如下

1. 初始化一个请求队列

2. 为每个请求设置相应的参数

3. 将每个请求压入请求队列,做好相关映射

4.发送多个请求,等待返回结果(libcurl会维护一个http请求线程,直到所有的请求都返回结果)

接口封装:

为了对实现对底层细节的封装,我们设计一套interface,对于其他开发人员来说,无需理解底层多线程请求细节,只需实现这套接口即可,

interface iMultiCurl {  

    public function get_url();  //http请求的url

    public function get_method(); // http method, GET or POST

    public function get_params(); // http 请求参数

    public function callback($result,$info); //异步调用时的回调函数

    public function load();  //同步调用时的函数(同时实现异步/同步是为了方便调用形式的切换)

}

缺点:

1.还不能对单个请求的做缓存;

2.只支持http请求,还不支持SOAP请求;

目前项目已经上线,从实际的运行情况看,已经达到了预计的目标。


营销课堂 , 版权所有丨本网站采用BY-NC-SA协议进行授权 , 转载请注明网站技术:PHP多线程调用API
喜欢 (1)or分享 (0)
admin
关于作者:
营销课堂,让营销更简单!

您必须 登录 才能发表评论!