Netty服务器和客户端超时

时间:2015-02-18 09:42:30

标签: java netty

我希望在服务器关闭时强制超时异常(对于网络损坏)。

我尝试这个配置:

pipeline.addLast("readTimeoutHandler", new ReadTimeoutHandler(5));
pipeline.addLast("writeTimeoutHandler", new WriteTimeoutHandler(5));
// Add the text line codec combination first,
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));

// Add the encoder and decoder are static as these are sharable
pipeline.addLast("decoder", new StringDecoder());
pipeline.addLast("encoder", new StringEncoder());

// Enable stream compression
pipeline.addLast("deflater", new JZlibEncoder(ZlibWrapper.GZIP));
pipeline.addLast("inflater", new JZlibDecoder(ZlibWrapper.GZIP));

pipeline.addLast(clientHandler);

但是当我关闭TCP服务器时,客户端可以尝试发送带有channel.writeAndFlush(tempMsg + AbstractSocketInitializer.ESCAPE_CHAR);

的消息

客户端永远不会抛出异常。

如果尝试在通道中写入并且从不接收响应,如何强制客户端抛出异常?

1 个答案:

答案 0 :(得分:1)

您可以查找channelInactive事件并对其进行操作,即抛出异常或其他内容。在客户端的ChannelInboundHandler之一中,覆盖以下方法:

  @Override
public void channelInactive(final ChannelHandlerContext ctx) throws Exception {
  // do something here
}

关闭服务器后,将立即触发该方法。