Netty 服务器和客户端超时
Netty server and client timeout
我想在服务器关闭时强制超时异常(对于断网)。
我试试这个配置:
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);
发送消息
客户端从不抛出异常。
当尝试在通道中写入并且从未收到响应时,如何强制客户端抛出异常?
您可以查找 channelInactive
事件并对其采取行动,即抛出异常或其他东西。在您的客户端的 ChannelInboundHandler
之一中覆盖以下方法:
@Override
public void channelInactive(final ChannelHandlerContext ctx) throws Exception {
// do something here
}
该方法将在您关闭服务器后立即触发。
我想在服务器关闭时强制超时异常(对于断网)。
我试试这个配置:
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);
客户端从不抛出异常。
当尝试在通道中写入并且从未收到响应时,如何强制客户端抛出异常?
您可以查找 channelInactive
事件并对其采取行动,即抛出异常或其他东西。在您的客户端的 ChannelInboundHandler
之一中覆盖以下方法:
@Override
public void channelInactive(final ChannelHandlerContext ctx) throws Exception {
// do something here
}
该方法将在您关闭服务器后立即触发。