码迷,mamicode.com
首页 > Web开发 > 详细

netty客户端异步获取数据

时间:2014-11-20 18:52:31      阅读:392      评论:0      收藏:0      [点我收藏+]

标签:style   http   io   ar   os   使用   sp   数据   on   

源码见,下面主要是做个重要代码记录

http://download.csdn.net/detail/json20080301/8180351


NETTY客户端获取数据采用的方式是异步获取数据,不像socket你不知道服务端何时处理请求,何时能得到响应,即使得到响应也没法自动退出程序;

必须使用以下步骤:


=================step 0.当然是发起异步连接操作,等待客户端链路关闭

//发起异步连接操作
ChannelFuture f = b.connect(this.host, this.port).sync();
//等待客户端链路关闭
f.channel().closeFuture().sync();


================step1.添加超时handler : pipeline.addLast( new ReadTimeoutHandler(6));


================step2.//优雅退出,释放NIO线程组 group.shutdownGracefully();


================step3.自定义EchoClientHandler ,捕获ReadTimeoutHandler的6秒异常,然后关闭链路

public class EchoClientHandler extends ChannelInboundHandlerAdapter {

/* 
*捕获ReadTimeoutHandler的6秒异常,然后关闭链路; 
*/
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
logger.log(Level.WARNING, "Unexpected exception from downstream.",
cause);
ctx.close();//发生异常关闭链路
}

}


====================对于第三步我想说,如果你自定义的数据协议中有判断消息包是否结束的方法,也可以将 ctx.close();//发生异常关闭链路 , 举例如下:

public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
ctx.flush();
if(sureQuit()){
// ctx.close();
}
}

判断是否可以关闭链路;一旦关系链路,客户端代码就会执行 group.shutdownGracefully(); 释放线程组,这样客户端就可以整个进程退出啦。

 

netty客户端异步获取数据

标签:style   http   io   ar   os   使用   sp   数据   on   

原文地址:http://blog.csdn.net/json20080301/article/details/41315709

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!