一个PHP高性能、多并发、restful的工具库(基于multi_curl)

   This is high performance curl wrapper written in pure PHP. It‘s compatible with PHP 5.4+ and HHVM. Notice that libcurl version must be over 7.36.0, otherwise timeout can not suppert decimal.

   这是一个高性能的PHP封装的HTTP Restful多线程并发请求库,参考借鉴了httpresful 、multirequest等优秀的代码。它与PHP 5.4和hhvm兼容。 注意,libcurl版本必须>=7.36.0,否则超时不支持小数。

  大家好,今天的主角是它: https://github.com/sinacms/MultiHttp ,这是本人写的一个curl工具库,在生产中十分好用,所以拿出来分享给大家,欢迎大家提issue/merge request, 点赞什么的。

<?php
// Include Composer‘s autoload file if not already included.
require __DIR__.‘/vendor/autoload.php‘;
use MultiHttp\Request;
use MultiHttp\Response;

//单个请求
$responses=array();
$responses[] = Request::create()->addQuery(‘wd=good‘)->get(‘http://baidu.com?‘, array(
          ‘timeout‘ => 3,
          ‘timeout_ms‘ => 2000,
          ‘callback‘ => function (Response $response) {

          }))->send();

$responses[] = Request::create()->get(‘http://qq.com‘, array(
          ‘callback‘ => function (Response $response) {
              //sth
          }))->addOptions(array(
          ‘method‘ => Request::PATCH,
          ‘timeout‘ => 3,
      ))->send();
      //test post
$responses[] = Request::create()->post(
      ‘http://127.0.0.1‘,array(‘data‘=>‘this_is_post_data‘), array(
          ‘callback‘ => function (Response $response) {
              //sth
          }))->send();

foreach ($responses as $response) {
  echo $response->request->uri, ‘ takes:‘, $response->duration,  "\n\t\n\t";
}
?>
//Multi-request 多个请求:

<?php
use MultiHttp\MultiRequest;

$mr  = MultiRequest::create();
$rtn = $mr->addOptions(
    array(
        array(
            ‘url‘    => ‘http://google.com‘,
            ‘timeout‘ => 2,
            ‘method‘ => ‘HEAD‘,
            ‘data‘   => array(
            ),
            ‘callback‘ => function (Response $response) {
                //sth
            }
        ),
    ))
    ->add(‘GET‘, ‘http://sina.cn‘,array(), array(
        ‘timeout‘ => 3
    ))
    ->import(Request::create()->trace(‘http://sohu.cn‘, array(
            ‘timeout‘  => 3,
            ‘callback‘ => function (Response $response) {
                //sth
            }))->applyOptions())
    ->send();
    foreach ($rtn as $response) {
        echo $response->request->uri, ‘ takes:‘, $response->duration, ‘ ‘, "\n\t\n\t";
    }

?>
options选项有:

   ‘url‘             => ‘CURLOPT_URL‘,
   ‘debug‘           => ‘CURLOPT_VERBOSE‘,//for debug verbose
   ‘method‘          => ‘CURLOPT_CUSTOMREQUEST‘,
   ‘data‘            => ‘CURLOPT_POSTFIELDS‘, // array or string , file begin with ‘@‘
   ‘ua‘              => ‘CURLOPT_USERAGENT‘,
   ‘timeout‘         => ‘CURLOPT_TIMEOUT‘, // (secs) 0 means indefinitely
   ‘connect_timeout‘ => ‘CURLOPT_CONNECTTIMEOUT‘,
   ‘referer‘         => ‘CURLOPT_REFERER‘,
   ‘binary‘          => ‘CURLOPT_BINARYTRANSFER‘,
   ‘port‘            => ‘CURLOPT_PORT‘,
   ‘header‘          => ‘CURLOPT_HEADER‘, // TRUE:include header
   ‘headers‘         => ‘CURLOPT_HTTPHEADER‘, // array
   ‘download‘        => ‘CURLOPT_FILE‘, // writing file stream (using fopen()), default is STDOUT
   ‘upload‘          => ‘CURLOPT_INFILE‘, // reading file stream
   ‘transfer‘        => ‘CURLOPT_RETURNTRANSFER‘, // TRUE:return string; FALSE:output directly (curl_exec)
   ‘follow_location‘ => ‘CURLOPT_FOLLOWLOCATION‘,
   ‘timeout_ms‘      => ‘CURLOPT_TIMEOUT_MS‘, // milliseconds,  libcurl version > 7.36.0 ,

  

    怎么样,什么人性、直观吧,

  另外,建议大家用最新stable版本, 有很多好用的feature, 比如 expectsJson() 会直接验证response是json,并解析成php array( or hashmap),更多特性请看tests目录的使用。

  欢迎大家使用它。

  我有空会补充些详细说明。

 

时间: 2024-10-09 12:18:48

一个PHP高性能、多并发、restful的工具库(基于multi_curl)的相关文章

Bean-Query 一个把对象转换为Map的Java工具库

刚开源了一个经过完整测试的Java工具类.目前的代码已经经历了完整的测试,正在申请放到Maven central Repository上. 地址如下: https://github.com/Jimmy-Shi/bean-query 使用说明如下: Bean-query Click Here for English version. BeanQuery 是一个把对象转换为Map的Java工具库.支持选择Bean中的一些属性,对结果进行排序和按照条件查询.不仅仅可以作用于顶层对象,也可以作用于子对象

一个小巧但功能强大的跨平台命令行工具库Crossline

Crossline Crossline是一个很小的跨平台命令行工具库,类似Linux上的readline. 项目地址:https://github.com/JunchuanWang80/Crossline 因为开发一个项目需要支持跨平台命令行,在Linux上readline是首选,bash/gdb/ftp都使用了这个库,但是Windows上没法直接用.后来搜到了一个开源项目linenoise,这个命令行工具库是Redis的作者开发的,Redis,Andriod和MongoDB都使用了.这个工具库

千万级PV规模高性能高并发网站架构

防伪码:好久不见,你会不会突然的出现. 客户端:缓存(expires).deflate压缩 缓存服务器:CDN/cache缓存静态内容如:html.jpg.gif.js等 静态web服务器:Apache/nginx静态服务器提供html页面内容 php/java服务器:PHP/JAVA动态内容 数据库缓存服务器:数据库缓存memcache/redis 数据库服务器:MYSQL数据库 数据存储:NFS/HADOOP等 高并发访问的核心原则其实就一句话"把所有的用户访问请求都尽量往前推".

浅谈千万级PV/IP规模高性能高并发网站架构

高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”. 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储). 如:能缓存在用户电脑本地的,就不要让他去访问CDN. 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了.能访问静态服务器的,就不要去 访问动态服务器.以此类推:能不访问数据库和存储就一定不要去访问数据库和存储. 说起来很轻松,实际做起来却不容易,但只要稍加努力

网站设计高性能高并发

高性能高并发 高并发访问的核心原则其实就一句话"把所有的用户访问请求都尽量往前推". 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储). 如:能缓存在用户电脑本地的,就不要让他去访问CDN.能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了.能访问静态服务器的,就不要去访问动态服务器.以此类推:能不访问数据库和存储就一定不要去访问数据库和存储. 说起来很轻松,实际

浅谈千万级PV/IP规模高性能高并发网站架构(转自老男孩)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/736710 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储). 如:能缓存在用户电脑本地的,就不要让他去访问CDN. 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了.能访问静态服务器的,就不要去访问动态

(转)浅谈千万级PV/IP规模高性能高并发网站架构

浅谈千万级PV/IP规模高性能高并发网站架构 原文:http://blog.51cto.com/oldboy/736710 文章架构简图:   高并发访问的核心原则其实就一句话"把所有的用户访问请求都尽量往前推". 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储). 如:能缓存在用户电脑本地的,就不要让他去访问CDN. 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务

高性能高并发系统的稳定性保障

小码哥 于 1 月前 发表在 七嘴八舌 作者:肖飞,于2011年8月份加入京东,曾亲身参与到京东的应用性能监控.统一日志.流式计算.内存缓存.四层防攻击等一些基础技术平台的研发和搭建工作,经历了京东的技术系统从简单粗放向复杂精细化的演变过程.目前主要工作为多中心交易项目中的数据复制中间件JingoBUS的研发.平时也会开发一些公共的平台和工具,关注分布式系统的实现.程序设计.性能优化.开发语言等. 本文是2015年肖飞在内部分享的<高性能高并发系统的稳定性保障>PPT内容. 性能.并发.稳定性

MySql计数器,如网站点击数,如何实现高性能高并发的计数器功能

MySql计数器,如网站点击数,如何实现高性能高并发的计数器功能 Clicks: 5338 Date: 2014-03-29 23:30:42 Power By 李轩Lane TagMysql计数器高性能 现在有很多的项目,对计数器的实现甚是随意,比如在实现网站文章点击数的时候,是这么设计数据表的,如:”article_id, menu_id, article_name, article_content, article_author, article_view......在article_vi