php+异步刷新封装,又一PHP libcurl封装异步并发HTTP客户端

这篇博客探讨了PHP内置curl扩展与pecl_http库的使用体验。文章指出,虽然pecl_http库提供了更多libcurl特性和底层的libevent支持,但在实际应用中,其性能和稳定性不如PHP内置的curl扩展,甚至存在内存泄露问题。示例代码展示了如何使用pecl_http进行HTTP请求,并展示了并发请求的处理方式。
摘要由CSDN通过智能技术生成

PHP标准库内置curl扩展,不过实现不完整,如multi_socket_action接口,无意中发现pecl http库同样基于libcurl封装,支持更多的libcurl特性,更新也比较快,底层通过libevent(epoll)实现multi_socket_action接口,不过pecl http版本1和版本2 api完全不兼容,使用过程中稳定性及性能并不如PHP内置的curl,好像还有内存泄露,以下为示例代码,基于pecl_http 2.20:<?php

function push($client, $url) {

$req = new http\Client\Request("GET", $url, ["User-Agent"=>"My Client/0.1"]);

$req->setOptions(array('connecttimeout'=>1, 'timeout'=>1));

$client->enqueue($req, function($response) use ($client, $req, $url) {

printf("%s returned '%s' (%d)\n", $response->getTransferInfo("effective_url"), $response->getInfo(), $response->getResponseCode());

echo $client->count().PHP_EOL;

global $urls;

if ($urls) {

while ($client->count() < 20) {

$url = array_shift($urls);

push($client, $url);

}

return true; // dequeue

}

});

}

$client = new http\Client;

$client->enablePipelining(true);

$client->enableEvents(true);

for ($i = 0; $i < 10000; ++$i) {

$urls[] = "http://192.168.1.3/";

}

for ($i = 0; $i < 20; ++$i) {

$url = array_shift($urls);

push($client, $url);

}

/*

try{

var_dump($client->send());

}

catch(http\Exception\RuntimeException $e)

{

echo 'Message: ' .$e->getMessage().PHP_EOL;

}

*/

while ($client->once()) {

$client->wait();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值