php的异步http请求类
基于上次写的关于php的libevent扩展的应用,我实现了一个异步的http请求类。
代码在github上:https://github.com/volca/AsyncHttpClient
使用示例
如下,在request的时候能够定义请求完成之后的callback函数。
<?php
$base = event_base_new();
$uri = "http://www.baidu.com/";
$config = array(
'eventbase' => $base
);
for($i = 0; $i < 10; $i++) {
$client = new AsyncHttpClient($uri, $config);
$client->request(function($result) {
echo "Result len:";
echo strlen($result['response']);
// parse response with Zend_Http_Response
$response = Zend_Http_Response::fromString($result['response']);
echo $response->getBody();
echo "\n";
});
}
event_base_loop($base);
echo "done\n";
目前的实现比较初级,只做了get方法的封装,如果需要http上传或者post,还需要另外实现。另外这个类也需要php的libevent扩展。
Update 2011.11.17
将这个类修改为继承自Zend_Http_Client,这样我可以少写一些代码,顺带也实现了文件http上传以及post(未经测试),代码中的使用示例也已经更新。
作者: Volcano 发表于November 10, 2011 at 4:24 pm
anakin 于 2011-11-10 @ 17:22:27 留言 :
立刻拿来用。
本来设计了一个用来解藕的消息系统,这下连给消息系统发消息都是异步的,彻底解脱了。
Volcano 于 2011-11-10 @ 17:37:33 留言 :
@anakin 期待后续反馈
KnightE 于 2011-11-12 @ 13:58:45 留言 :
转义符要处理下呀
Volcano 于 2011-11-13 @ 09:17:59 留言 :
@KnightE 以前写的语法加亮插件对引号处理的不是太妥当,小小调整了一下
Anonymous 于 2011-11-18 @ 14:08:07 留言 :
和php直接调用socket有什么区别呢?
Volcano 于 2011-11-18 @ 15:23:16 留言 :
直接调用socket,一般情况下要等一个请求完成了再进行下一个请求,这种理论上可以同时做好几个http请求,而且可以设置请求完成之后的callback
dongxie 于 2012-01-03 @ 20:07:24 留言 :
hi,我看你blog很久咯,一直没留言,我问下,libevent和memcached的php扩展,你平时开发在win下面的扩展有么?
Volcano 于 2012-01-04 @ 08:51:11 留言 :
在这里有一点windows下libevent和memcached的资料 http://splinedancer.com/memcached-win32/
我不在win下开发