teknasyon/guzzle-async-pool
Composer 安装命令:
composer require teknasyon/guzzle-async-pool
包简介
README 文档
README
Bu kütüphane GuzzleHttp\Pool sınıfının özellikle Soap için kullanımını kolaylaştırmayı amaçlamaktadır.
Demo
example klasöründe bulunan örnek kodları çalıştırmak için sırasıyla aşağıdaki komutları çalıştırabilirsiniz:
$ docker run -it --rm -v $(pwd):/app composer update $ cd example $ docker build -t testserver . $ docker run -d -p 8080:80 -v $(pwd):/var/www/html testserver $ php test.php $ php test_guzzle_pool.php
Kurulum
Kütüphaneyi projenizde kullanmak için composer.json dosyanıza aşağıdaki satırları ekleyin ve composer update komutunu çalıştırın:
"require": {
"teknasyon/guzzle-async-pool": "1.0"
}
Kullanım
Soap servisine yapılacak istekler kütüphane içerisindeki Teknasyon\GuzzleAsyncPool\SoapRequestFactory sınıfı ile oluşturulabilir. Bu sınıfın factory metodu kullanılarak istek gönderimi için gerekli olan GuzzleHttp\Psr7\Request türünde bir obje üretilir. Örnek kullanım:
// Soap servisinin wsdl dosyası $wsdl = 'http://127.0.0.1:8080/soap_server.php?wsdl'; // Soap servis adresi $endpoint = 'http://127.0.0.1:8080/soap_server.php'; // İstekte bulunulacak SoapAction bilgisi $soapAction = 'http://tempuri.org/Multiply'; // İstekte bulunulacak fonksiyon adı. $functionName = 'Multiply'; // İstekte bulunulacak fonksiyon için parametreler. $functionParams = ['intA' => 10, 'intB' => 3]; $request = SoapRequestFactory::factory( $wsdl, $endpoint, $soapAction, $functionName, $functionParams );
Üretilen istek objeleri Teknasyon\GuzzleAsyncPool\Pool sınıfı vasıtasıyla gönderilir. Bu sınıfın onCompletedRequest metodu ile başarılı istek cevaplarını, onFailedRequest isimli metodu ile hatalı istek cevapları dinlenir.
$requests = [
SoapRequestFactory::factory(
'http://127.0.0.1:8080/soap_server.php?wsdl',
'http://127.0.0.1:8080/soap_server.php',
'http://tempuri.org/Add',
'Add',
['intA' => 10, 'intB' => 3]
),
SoapRequestFactory::factory(
'http://127.0.0.1:8080/soap_server.php?wsdl',
'http://127.0.0.1:8080/soap_server.php',
'http://tempuri.org/Subtract',
'Subtract',
['intA' => 10, 'intB' => 3]
),
SoapRequestFactory::factory(
'http://127.0.0.1:8080/soap_server.php?wsdl',
'http://127.0.0.1:8080/soap_server.php',
'http://tempuri.org/Multiply',
'Multiply',
['intA' => 10, 'intB' => 3]
)
];
$guzzlePoolSettings = ['concurrency' => 5];
$guzzleClient = new Client();
$pool = new Teknasyon\GuzzleAsyncPool\Pool($requests, $guzzlePoolSettings, $guzzleClient);
$pool->onCompletedRequest(function ($index, RequestInterface $request, ResponseInterface $response) {
});
$pool->onFailedRequest(function ($index, RequestInterface $request, \Exception $exception) {
});
$pool->wait();
onCompletedRequest metodu ile tanımlayacağınız fonksiyon sırasıyla şu parametreleri alır:
- $index: İstek objesinin $requests dizisindeki indis değerini belirtir.
- $request: İstek objesi.
- $response: Yanıt objesi.
onFailedRequest metodu ile tanımlayacağınız fonksiyon sırasıyla şu parametreleri alır:
- $index: İstek objesinin $requests dizisindeki indis değerini belirtir.
- $request: İstek objesi.
- $exception: Hata objesi. Hata objesi GuzzleHttp\Exception\RequestException türünde ise $exception->getResponse() üzerinden Response objesine erişebilirsiniz.
Soap istek ve yanıtlarının dönüştürülmesi
Teknasyon\GuzzleAsyncPool\SoapRequestFactory sınıfı belirtilen parametrelere göre otomatik olarak XML içeriğini hazırlar ve bu içeriği kullanarak Request objesini oluşturur. Bunun için özel bir işlem yapmanıza gerek yok. Ancak soap yanıtları için Teknasyon\GuzzleAsyncPool\Soap\Decoder sınıfını kullanmalısınız. Bu sınıf aldığınız XML cevabını PHP dizisine dönüştürmektedir. onCompletedRequest ya da onFailedRequest metodları içinde elde ettiğiniz Psr\Http\Message\ResponseInterface türündeki objeler vasıtasıyla cevabı dönüştürebilirsiniz.
$pool->onCompletedRequest(function ($index, RequestInterface $request, ResponseInterface $response) use ($startTime) { $soapResponse = Decoder::decode($response->getBody()->getContents()); ... }); $pool->onFailedRequest(function ($index, RequestInterface $request, \Exception $exception) use ($startTime) { $soapResponse = null; if ($exception instanceof RequestException) { $soapResponse = Decoder::decode($exception->getResponse()->getBody()->getContents()); } ... });
Guzzle Ayarları
Teknasyon\GuzzleAsyncPool\Pool sınıfı ikinci parametresi GuzzleHttp\Pool ayarlarını, üçüncü parametresi ise GuzzleHttp\Client objesini bekler. Guzzle dökümanlarından değişiklik yapmak istediğiniz ayarları bu parametreler ile güncelleyebilirsiniz. En sık kullanılacak olan ayar concurrency ayarı. Bu ayar ile aynı anda gönderilecek istek sayısını kısıtlarsınız. Bu ayarı ikinci parametrede istenen dizide belirtmeniz gerekmekte.
teknasyon/guzzle-async-pool 适用场景与选型建议
teknasyon/guzzle-async-pool 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 22 次下载、GitHub Stars 达 4, 最近一次更新时间为 2017 年 08 月 03 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 teknasyon/guzzle-async-pool 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 teknasyon/guzzle-async-pool 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 22
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 4
- 点击次数: 5
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Unknown
- 更新时间: 2017-08-03