btafoya / fxmlrpc
快速且小巧的XML/RPC客户端,支持各种HTTP客户端的桥梁
1.0.0
2019-04-04 22:27 UTC
Requires (Dev)
- php: >=5.3.0
- ext-curl: *
- guzzle/guzzle: *
- kriswallsmith/buzz: *
- monolog/monolog: *
- phpunit/phpunit: 3.*
- psr/log: *
- zendframework/zend-http: 2.0.*
- zendframework/zend-log: 2.0.*
- zendframework/zendframework1: 1.*
Suggests
- ext-http: Use ext/http as HTTP client
- guzzle/guzzle: To integrate Guzzle as HTTP client
- kriswallsmith/buzz: To integrate Buzz as HTTP client
- monolog/monolog: To integrate monolog as logger
- zendframework/zend-http: To use ZF2 Zend\Http\Client as HTTP client
- zendframework/zend-log: To use ZF2 Zend\Log\Logger as a logger
- zendframework/zendframework1: To use ZF1 Zend_Http_Client as HTTP client
README
- 方便的、面向对象的API(类似于Zend Framework中的XML/RPC客户端)
- 非常快速地序列化和解析涉及的XML负载
- 坚持使用您已经使用的HTTP客户端:Buzz、ZF1/ZF2 HTTP客户端、Guzzle、PECL HTTP
- 根据MIT许可协议的条款许可
- 支持现代标准:通过composer轻松安装,完全兼容PSR-0、PSR-1和PSR-2
- 不懈地进行单元和集成测试
- 实现了所有已知的XML/RPC扩展
最新改进
[BUG]
修复了XmlWriterSerializer
中的重大问题(详细信息见#4)[FEATURE]
为多调用提供特殊的API[FEATURE]
支持所有Java XML/RPC扩展[BC]
fXmlRpc\AbstractDecorator
和fXmlRpc\ClientInterface
现在包括添加和附加参数的方法[BC]
fXmlRpc\Client
被标记为final。属性被标记为private。通过装饰器扩展。[BC]
将fXmlRpc\Value\Base64
的已弃用构造函数标记为private。此外,值对象现在是final的[TESTING]
对Java XML/RPC和Python XML/RPC进行集成测试[BUG]
修复了隐式字符串类型处理(字符串不是值的子项)[IMPROVEMENT]
改进了异常处理[BC]
将命名方案更改为studly caps[BUG]
修复了各种数组/struct边界情况[IMPROVEMENT]
序列化和解析器的小型内存和性能改进[BC]
弃用了fXmlRpc\Value\Base64
的已弃用构造函数,并引入了::serialize()
和::deserialize()
。[FEATURE]
添加了fXmlRpc\Client::prependParams()
和fXmlRpc\Client::appendParams()
来设置默认参数。这有助于例如您需要为每个调用添加授权信息时[FEATURE]
时间日志记录器现在支持基于阈值的日志记录,以简化控制您的服务器在一定时间内的响应[TESTING]
Travis现在运行针对支持的HTTP客户端和日志组件的各个版本的测试套件。
它真的有多快?
从用户空间的角度来看,I/O性能超出了范围,但解析和序列化速度才是关键。我们能够多快地从PHP数据结构生成XML负载?我们能够多快地解析服务器的响应?fXmlRpc使用基于流的XML写入器/读取器来实现其性能,并对此进行了大量的优化(即丑化)。因此,用户空间版本仅比本机C实现(ext/xmlrpc)慢约2倍。
解析器
Zend\XmlRpc\Value (ZF2): 249.02972793579 sec
Zend_XmlRpc_Value (ZF1): 253.88145494461 sec
fXmlRpc\Parser\XmlReaderParser: 36.274516105652 sec
fXmlRpc\Parser\NativeParser: 18.652323007584 sec
序列化器
Zend\XmlRpc\Request (ZF2): 52.004573106766 sec
Zend_XmlRpc_Request (ZF1): 65.042532920837 sec
fXmlRpc\Serializer\XmlWriterSerializer: 23.652673006058 sec
fXmlRpc\Serializer\NativeSerializer: 9.0790779590607 sec
用法
基本用法
<?php $client = new fXmlRpc\Client('http://endpoint.com'); $client->call('remoteMethod', array('arg1', true));
使用本机(基于ext/xmlrpc的)序列化器/解析器(以获得更好的性能)
<?php $client = new fXmlRpc\Client( 'http://endpoint.com', null, new fXmlRpc\Parser\NativeParser(), new fXmlRpc\Serializer\NativeSerializer() ); $client->call('remoteMethod', array('arg1', true));
添加和附加参数
<?php $client = new fXmlRpc\Client('http://endpoint.com'); $client->prependParams(array('username', 'password')); $client->appendParams(array('appended')); ...
使用方便的代理对象
<?php $proxy = new fXmlRpc\Proxy(new fXmlRpc\Client('http://endpoint.com')); // Call system.echo $proxy->system->echo('Hello World!');
多调用请求的有用抽象
<?php $result = $client->multicall() ->addCall('system.add', array(1, 2)) ->addCall( 'system.add', array(2, 3), function ($result) { echo "Result was: " . $result; }, function($result) { echo "An error occured: " . var_export($result, true); } ) ->onSuccess(function ($result) {echo "Success";}) // Success handler for each call ->onError(function ($result) {echo "Error";}) // Error handler for each call ->execute();
与各种HTTP客户端的集成
<?php /** Buzz (https://github.com/kriswallsmith/Buzz) */ $browser = new Buzz\Browser(); $browser->...(); $client = new fXmlRpc\Client( 'http://endpoint.com', new fXmlRpc\Transport\BuzzBrowserBridge($browser) ); /** Zend Framework 1 (http://framework.zend.com/) */ $httpClient = new Zend_Http_Client(); $httpClient->...(); $client = new fXmlRpc\Client( 'http://endpoint.com', new fXmlRpc\Transport\ZF1HttpClientBridge($httpClient) ); /** Zend Framework 2 (http://framework.zend.com/zf2) */ $httpClient = new Zend\Http\Client(); $httpClient->...(); $client = new fXmlRpc\Client( 'http://endpoint.com', new fXmlRpc\Transport\ZF2HttpClientBridge($httpClient) ); /** Guzzle (http://guzzlephp.org/) */ $httpClient = new Guzzle\Http\Client(); $httpClient->...(); $client = new fXmlRpc\Client( 'http://endpoint.com', new fXmlRpc\Transport\GuzzleBridge($httpClient) ); /** PECL HTTP (http://pecl.php.net/pecl_http) */ $request = new HttpRequest(); $request->...(); $client = new fXmlRpc\Client( 'http://endpoint.com', new fXmlRpc\Transport\PeclHttpBridge($request) );
对XML/RPC请求进行时间跟踪,以找到有问题的调用
fXmlRpc允许您跟踪您的XML/RPC请求,以找出哪些花费了多长时间。它提供了一个fXmlRpc\Timing\TimingDecorator
,可以与实现fXmlRpc\Timing\TimerInterface
的各种计时器一起使用。目前实现了Monolog、Zend Framework 1 Zend_Log
和Zend Framework 2 Zend\Log
的桥梁。
用法
<?php $client = new fXmlRpc\Timing\TimingDecorator( new fXmlRpc\Client(...), new fXmlRpc\Timing\MonologTimerBridge( $monolog, Monolog\Logger::ALERT, 'My custom log message template %F' ) );