Nettyチャネルがあり、基になるソケットにタイムアウトを設定したいと思います(デフォルトでは0に設定されています)。
タイムアウトの目的は、たとえば15分間何も起こらなかった場合に、未使用のチャネルを閉じることです。
私はそうするための構成を見ていませんが、ソケット自体も私から隠されています。
ありがとう
Nettyチャネルがあり、基になるソケットにタイムアウトを設定したいと思います(デフォルトでは0に設定されています)。
タイムアウトの目的は、たとえば15分間何も起こらなかった場合に、未使用のチャネルを閉じることです。
私はそうするための構成を見ていませんが、ソケット自体も私から隠されています。
ありがとう
ReadTimeoutHandlerクラスを使用すると、タイムアウトを制御できます。
以下はJavadocからの引用です。
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)がReadTimeoutExceptionで呼び出されます。
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
if (e.getCause() instanceof ReadTimeoutException) {
// NOP
}
ctx.getChannel().close();
}