首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

施用Netty 构造一个异步的httpclient

2012-11-10 
使用Netty 构造一个异步的httpclient原文地址:http://dev.firnow.com/course/3_program/java/javajs/20100

使用Netty 构造一个异步的httpclient

原文地址:http://dev.firnow.com/course/3_program/java/javajs/20100719/454049.html

使用Netty 构造一个异步的httpclient


?? 这篇文档目的是通过一个 Netty构造的Http客户端demo,来说名如何使用 Netty。

1 ? 示例代码?? ??HttpClient.java??
?? ??HttpClientPipelineFactory.java??
?? ??HttpResponseHandler.java??


2 Httpclient 使用方法,详见代码HttpClient.java中main函数。?? ??());?

?? ? ?这些代码的目的就是设置 等到网络应答,也就是获得http响应后应做哪些工作。ClientBootstrap 会为每个channel生成一个ChannelPipeline。ChannelPipeline的作用就是处理channel上的数据。至于如何处理就要看ChannelPipeline上有哪些ChannelHandler,下边详述 先看ChannelPipeline是如何产生的。?? ???ClientBootstrap 中包含了一个HttpClientPipelineFactory 这是一个实现了ChannelPipelineFactory接口的getPipeline方法的类。 在getPipeline方法中可以按照自己需求定义生成一个PipeLine。?
?? ??? ??? ??//以下代码在?HttpClientPipelineFactory.java getPipeline()中?
?? ? ? ? ? ? ChannelPipeline pipeline = pipeline();
?? ? ? ??? ??pipeline.addLast("decoder", new HttpResponseDecoder());?? ? ? ??? ??pipeline.addLast("aggregator", new HttpChunkAggregator(1048576));?? ? ? ??? ??pipeline.addLast("encoder", new HttpRequestEncoder());
?? ??? 这里根据自己定义生成一个pipeline。 pipeline()是Netty提供的生成pipeline的静态函数。因为要做的是http访问所以在getPipeline中配置了 Netty提供的访问http的几个ChannelHandler。分别是把http响应数据解码成HttpResponse对象的HttpResponseDecoder,合并chunk数据的HttpChunkAggregator,把HttpRequest对象编码成http请求协议的HttpRequestEncoder。 ?ChannelPipeline不仅设置了处理channel的handler 而且设置了处理顺序 ,这个可以参考文档。大体顺序是从channel流入的数据一步步被解析生成为程序的对象,流出的时候是把程序中的对象一步步解析生成通讯协议。
?? ??? ?在设置好这些后。可以往channel里边写入数据了。?
?? ?????? ?
?? ??? ??? ??//以下代码在?HttpClient.java ConnectOk类中?operationComplete?()中?? ??? ??? ?Channel channel = future.getChannel(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ?? ??channel.write(request); ? ??

?? ??? ?上边说到当channel真正被打开后会调用ConnectOk的operationComplete方法。在这里可以获得这个准备好的channel 然后调用write方法。这可以看到往channel里边写入了一个 HttpRequest对象。这个HttpRequest对象会被pipeline 编码成http请求最终发给服务器。注意write放法也是异步的,它会马上返回一个
ChannelFuture 对象。如果想要在write完成后做点什么 可以给这个ChannelFuture对象添加一个Listener 等待回调。
?? ??? ?等得到http应答后 pipeline会把channel中的数据一步步解析成HttpResponse对象,里边包括了 header cookie request ....一切信息。后边就是提供一个自己定义的handler 来处理这个response

?? ? ? 代码的基本流程就是这样。

1 楼 yunnysunny 2012-08-30   代码呢?没提供下载啊。 2 楼 yunnysunny 2012-08-30   "2 Httpclient 使用方法,详见代码HttpClient.java中main函数。"
代码呢?怎么没有提供下载?

热点排行