一个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等优秀的代码。

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目录的使用。

  欢迎大家使用它。

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

 

 

谋胆并重
目录
相关文章
|
11月前
|
JavaScript 前端开发 API
PHP 发展简史:从个人工具到互联网基石
PHP 起源于 1994 年,由 Rasmus Lerdorf 为简化网页开发而创建,后逐步演变为功能强大的编程语言。从最初的个人工具到支撑全球 77.4% 的服务器端脚本市场,PHP 凭借易用性、稳定性和广泛的生态支持,在 Web 开发领域占据重要地位。经历 PHP 6 的挫折后,PHP 7 实现性能飞跃,如今已更新至 PHP 8.2,持续为 WordPress、Facebook、Wikipedia 等大型项目提供动力。PHP 的发展历程,不仅是一部技术演进史,更映射了互联网时代的变迁。
576 8
|
10月前
|
NoSQL API PHP
PHP-Casbin:一个让开发者不再为权限控制 “重复造轮子” 的工具
PHP-Casbin 是一个轻量、灵活的开源权限框架,支持 ACL、RBAC、ABAC 等多种模型,帮助 PHP 开发者高效解决权限控制难题。它具备跨框架、跨语言、动态权限、多租户隔离等能力,适用于电商、SaaS、政企系统等复杂场景,让开发者摆脱重复造轮子,提升项目安全与可维护性。
489 0
|
消息中间件 缓存 弹性计算
纯PHP+MySQL手搓高性能论坛系统!代码精简,拒绝臃肿
本内容分享了一套经实战验证的社交系统架构设计,支撑从1到100万用户的发展,并历经6次流量洪峰考验。架构涵盖客户端层(App、小程序、公众号)、接入层(API网关、负载均衡、CDN)、业务服务层(用户、内容、关系、消息等服务)、数据层(MySQL、Redis、MongoDB等)及运维监控层(日志、监控、告警)。核心设计包括数据库分库分表、多级缓存体系、消息队列削峰填谷、CQRS模式与热点数据动态缓存。同时提供应对流量洪峰的弹性伸缩方案及降级熔断机制,并通过Prometheus实现全链路监控。开源建议结构清晰,适合大型社交平台构建与优化。
543 11
|
9月前
|
存储 监控 算法
基于 PHP 布隆过滤器的局域网监控管理工具异常行为检测算法研究
布隆过滤器以其高效的空间利用率和毫秒级查询性能,为局域网监控管理工具提供轻量化异常设备检测方案。相比传统数据库,显著降低延迟与资源消耗,适配边缘设备部署需求,提升网络安全实时防护能力。(238字)
316 0
|
JavaScript Linux PHP
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
331 3
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
PHP
基于PHP开发的资源库系统源码
基于PHP开发的资源库系统源码
310 13
|
Linux PHP iOS开发
PHP-Raylib 视 频 游 戏 编 程 库
php-raylib 是基于 PHP-FFI 绑定的 raylib-v5.5 游戏开发库,让 PHP 开发者轻松实现视频游戏编程。相比仅支持 4.+ 版本的原库,本项目适配最新 5.5 版本,并提供友好文档与示例代码(如窗口初始化、文本绘制等)。支持 PHP 7.4+ 和多平台(Windows、Linux、macOS),可通过 Composer 快速安装。欢迎贡献和完善![查看文档](http://raylib.kllxs.top/) 或访问仓库(GitHub/Gitee/Gitcode)。
PHP-Raylib 视 频 游 戏 编 程 库
|
监控 定位技术 PHP
使用PHP接入纯真IP库:实现IP地址地理位置查询
本文介绍了如何使用PHP接入纯真IP库(QQWry),实现IP地址的地理位置查询。纯真IP库是一个轻量级的IP数据库,数据格式简单,查询速度快,适合Web应用。首先,下载并放置`QQWry.dat`文件到项目目录。接着,通过编写PHP类解析该文件,实现IP查询功能。最后,提供了一个完整的案例演示,展示如何查询IP地址对应的国家和地区信息。该工具适用于用户地理位置分析、访问日志分析和风控系统等场景,具有轻量级、查询速度快、数据更新方便等优点。
|
JSON API Go
基于责任链与策略模式的轻量级PHP日志库设计
项目日志乱成一团,bug 时好时坏,服务器问题难以复现?我写了个 PHP 日志系统,第一时间发现问题,避免跑路。实现了责任链模式+策略模式,让日志存储更灵活,支持多种输出方式。

热门文章

最新文章