利用PHP原生函数并行多线程处理(请求)网络数据

96
wushannn
0.1 2018.05.08 22:53* 字数 400

        最近在项目中碰到的一个问题,需要大量请求同一个第三方接口达到发送消息的目的。我们一般会想到的是利用curl循环依次请求接口,没错,当请求量较少的时候,完全能应付。倘若一旦请求量增大,会发现简单的循环请求方式并不能让我们如愿以偿,往往会拖慢程序的执行效率,甚至导致页面卡死的情况发生,这时候就得另辟蹊径了......                                          

        这时候可以用到的方法有很多,比如:redis+消息队列,popen(),fscokopen(),socket,swoole等等......严格意义上来说,php7以下不支持多线程,需要通过其它手段来进行模拟多线程。这里介绍一个简单好用的方法,利用curl的衍生函数curl_multi_init()。其在php手册上面的解释为:允许并行地处理批处理cURL句柄。

        贴上代码:

        关于此方法与curl循环的执行效率对比:curl_multi_init比curl_init快30倍。这里只做了100次请求的数据对比,但是如果网站并发量很大,每个访问请求同时发起几个或者更多的请求,负载随之就上来了,这里的访问速度是提升了,但访问极限量却减小了,所以这个方法适合访问数不多,但是要考虑访问效率的网站。

PHP
Web note ad 1