netty-3.2.4.Final IDLE时无法发送链路检测报文的BUG

刚刚从mina中转向netty,链路检测报文怎么配都不好使,google之,终于在jboss的官网上发现已经报告此bug,并在netty4.0修复,给提供了patch包,修复patch之后,重新打包,发现还是没有解决。查看源码之后发现netty将超时的时间从options中设置。于是将超时时间重新设置:


ClientBootstrap bootstrap = new ClientBootstrap(new NioClientSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool())
);
ChannelPipelineFactory pipelineFactory = new MyPipelineFactory(clientSessionHandler ,decoder,encoder);
bootstrap.setPipelineFactory( pipelineFactory );
bootstrap.setOption("allIdleTime","5"); //这里,很重要


public class ClientIdleHandler extends IdleStateAwareChannelHandler {
final Logger logger = LoggerFactory.getLogger(ClientIdleHandler.class);
@Override
public void channelIdle(ChannelHandlerContext ctx, IdleStateEvent e) throws Exception {
if( e.getState() == IdleState.ALL_IDLE){
logger.debug("链路空闲!发送心跳!S:{} - C:{} idleState:{}", new Object[]{ctx.getChannel().getRemoteAddress(), ctx.getChannel().getLocalAddress() , e.getState()});
e.getChannel().write(MessageHelper.buildMessageEcho());
super.channelIdle(ctx, e);
}


}

}





public class MyPipelineFactory implements ChannelPipelineFactory{

private ETMessageDecoder decoder;
private ETMessageEncoder encoder;

private ChannelHandler clientHandler;

public MyPipelineFactory(ChannelHandler clientHandler,ETMessageDecoder decoder,ETMessageEncoder encoder){
this.clientHandler = clientHandler;
this.decoder = decoder;
this.encoder = encoder;

}


@Override
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline pipeline = Channels.pipeline();
Timer timer = new HashedWheelTimer();
pipeline.addLast("encoder",encoder);
pipeline.addLast("decoder" , decoder);
pipeline.addLast("handler" , clientHandler);
pipeline.addLast("timeout", new IdleStateHandler(timer, 0, 0, 10));
pipeline.addLast("idleHandler", new ClientIdleHandler());

return pipeline;
}
}


重新启动,解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值