我有一个 netty 通道,我想在底层套接字上设置超时(默认设置为 0 )。
超时的目的是,如果 15 分钟内没有发生任何事情,则未使用的通道将被关闭。
虽然我没有看到任何配置可以这样做,而且套接字本身也对我隐藏。
Thanks
如果使用ReadTimeoutHandler类,可以控制超时。
以下是引自Javadoc http://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/timeout/ReadTimeoutHandler.html.
public class MyPipelineFactory implements ChannelPipelineFactory {
private final Timer timer;
public MyPipelineFactory(Timer timer) {
this.timer = timer;
}
public ChannelPipeline getPipeline() {
// An example configuration that implements 30-second read timeout:
return Channels.pipeline(
new ReadTimeoutHandler(timer, 30), // timer must be shared.
new MyHandler());
}
}
ServerBootstrap bootstrap = ...;
Timer timer = new HashedWheelTimer();
...
bootstrap.setPipelineFactory(new MyPipelineFactory(timer));
...
当它将导致超时时,将调用 MyHandler.exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)读取超时异常.
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
if (e.getCause() instanceof ReadTimeoutException) {
// NOP
}
ctx.getChannel().close();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)