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

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

  1. <?php
  2. // Include Composer's autoload file if not already included.
  3. require __DIR__.'/vendor/autoload.php';
  4. use MultiHttp\Request;
  5. use MultiHttp\Response;
  6.  
  7. //单个请求
  8. $responses=array();
  9. $responses[] = Request::create()->addQuery('wd=good')->get('http://baidu.com?', array(
  10. 'timeout' => 3,
  11. 'timeout_ms' => 2000,
  12. 'callback' => function (Response $response) {
  13.  
  14. }))->send();
  15.  
  16. $responses[] = Request::create()->get('http://qq.com', array(
  17. 'callback' => function (Response $response) {
  18. //sth
  19. }))->addOptions(array(
  20. 'method' => Request::PATCH,
  21. 'timeout' => 3,
  22. ))->send();
  23. //test post
  24. $responses[] = Request::create()->post(
  25. 'http://127.0.0.1',array('data'=>'this_is_post_data'), array(
  26. 'callback' => function (Response $response) {
  27. //sth
  28. }))->send();
  29.  
  30. foreach ($responses as $response) {
  31. echo $response->request->uri, ' takes:', $response->duration, "\n\t\n\t";
  32. }
  33. ?>
  34. //Multi-request 多个请求:
  35.  
  36. <?php
  37. use MultiHttp\MultiRequest;
  38.  
  39. $mr = MultiRequest::create();
  40. $rtn = $mr->addOptions(
  41. array(
  42. array(
  43. 'url' => 'http://google.com',
  44. 'timeout' => 2,
  45. 'method' => 'HEAD',
  46. 'data' => array(
  47. ),
  48. 'callback' => function (Response $response) {
  49. //sth
  50. }
  51. ),
  52. ))
  53. ->add('GET', 'http://sina.cn',array(), array(
  54. 'timeout' => 3
  55. ))
  56. ->import(Request::create()->trace('http://sohu.cn', array(
  57. 'timeout' => 3,
  58. 'callback' => function (Response $response) {
  59. //sth
  60. }))->applyOptions())
  61. ->send();
  62. foreach ($rtn as $response) {
  63. echo $response->request->uri, ' takes:', $response->duration, ' ', "\n\t\n\t";
  64. }
  65.  
  66. ?>
  1. options选项有:
  2.  
  3. 'url' => 'CURLOPT_URL',
  4. 'debug' => 'CURLOPT_VERBOSE',//for debug verbose
  5. 'method' => 'CURLOPT_CUSTOMREQUEST',
  6. 'data' => 'CURLOPT_POSTFIELDS', // array or string , file begin with '@'
  7. 'ua' => 'CURLOPT_USERAGENT',
  8. 'timeout' => 'CURLOPT_TIMEOUT', // (secs) 0 means indefinitely
  9. 'connect_timeout' => 'CURLOPT_CONNECTTIMEOUT',
  10. 'referer' => 'CURLOPT_REFERER',
  11. 'binary' => 'CURLOPT_BINARYTRANSFER',
  12. 'port' => 'CURLOPT_PORT',
  13. 'header' => 'CURLOPT_HEADER', // TRUE:include header
  14. 'headers' => 'CURLOPT_HTTPHEADER', // array
  15. 'download' => 'CURLOPT_FILE', // writing file stream (using fopen()), default is STDOUT
  16. 'upload' => 'CURLOPT_INFILE', // reading file stream
  17. 'transfer' => 'CURLOPT_RETURNTRANSFER', // TRUE:return string; FALSE:output directly (curl_exec)
  18. 'follow_location' => 'CURLOPT_FOLLOWLOCATION',
  19. 'timeout_ms' => 'CURLOPT_TIMEOUT_MS', // milliseconds, libcurl version > 7.36.0 ,

  

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

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

  欢迎大家使用它。

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

 

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

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

    刚开源了一个经过完整測试的Java工具类. 地址例如以下: https://github.com/Jimmy-Shi/bean-query 使用说明例如以下: Bean-query Click Her ...

  2. 使用 js 实现一个中文自动转换成拼音的工具库

    使用 js 实现一个中文自动转换成拼音的工具库 中文 => zhong-wen 应用场景 SEO 友好, URL 自动转换 blogs 发布文章,自动化部署,自动生成 url 的 path (时 ...

  3. 前端MVC Vue2学习总结(六)——axios与跨域HTTP请求、Lodash工具库

    一.axios Vue更新到2.0之后宣告不再对vue-resource更新,推荐使用axios,axios是一个用于客户端与服务器通信的组件,axios 是一个基于Promise 用于浏览器和 no ...

  4. 非常好用的JavaScript 工具库--lodash

    一.什么是lodash? lodash库是一个具有一致接口.模块化.高性能等特性的 JavaScript 工具库. lodash是一个javascript库,也是Node JS的常用模块,它内部封装了 ...

  5. fastjson——json工具库

    fastjson alibaba fastjson是阿里巴巴公司开源维护的一个处理json格式数据的java工具库. 功能特性: 数据绑定databind (json string <--> ...

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

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/736710 如果把来 ...

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

    高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”. 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部 ...

  8. 高性能高并发服务器架构设计探究——以flamigo服务器代码为例

    这篇文章我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序. 所谓高性能就是服务器能流畅地处理各个客户端的连接并尽量低延迟地应答客户端的请求:所谓高并发,指的是服务器可以同时 ...

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

    浅谈千万级PV/IP规模高性能高并发网站架构 原文:http://blog.51cto.com/oldboy/736710 文章架构简图:   高并发访问的核心原则其实就一句话“把所有的用户访问请求都 ...

随机推荐

  1. python常用模块上篇

    python常见模块 分两篇分别介绍下述模块 time模块 random模块 hashlib模块 os模块 sys模块 logging模块 序列号模块 configparser模块 re模块 time ...

  2. 使用python实现计算器功能

    学习python过程中的作业.实现了+.-.×./.及幂运算,支持括号优先级. 代码为python3.5 import re def formatEquation(string): string = ...

  3. DB---数据库中Schema的理解

    今天看到了Schema一词,对于它的理解网上也是说法很多,有一种受到认可的程度比较大,暂且先使用一下: " 首先我来做一个比喻,什么是Database,什么是Schema,什么是Table, ...

  4. print、println与printf之间的区别

    //print没有换行的而println有自动换行功能.实例:uprint.java class uprint{public static void main(String arg[]){int i, ...

  5. 个性化推荐系统(七)--- ABTest ab测试平台

    个性化推荐系统.搜索引擎.广告系统,这些系统都需要在线上不断上线,不断优化,优化之后怎么确定是好是坏.这时就需要ABTest来确定,最近想的办法.优化的算法.优化的逻辑数据是正向的,是有意义的,是提升 ...

  6. 分布式数据库TiDB的部署

    转自:https://my.oschina.net/Kenyon/blog/908370 一.环境 CentOS Linux release 7.3.1611 (Core)172.26.11.91   ...

  7. Windows 安装 python2.7

    Windows 安装 python2.7 python2.7下载地址: https://www.python.org/downloads/release/python-2714/ 安装过程: 设置系统 ...

  8. Dragon Balls

    Dragon Balls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. CUDA C Best Practices Guide 在线教程学习笔记 Part 2

    10. 执行配置优化 ● 一个 SM中,占用率 = 活动线程束的数量 / 最大可能活动线程束的数量.后者保存在设备属性的  maxThreadsPerMultiProcessor  分量中(GTX10 ...

  10. 统一addEventListener与attachEvent中this指向问题

    1.this指向问题 使用addEventListener注册的事件,事件处理函数中 this指向目标元素: 使用attachEvent注册的事件,事件处理函数中 this指向window对象 要想将 ...