我使用Netty在Ubuntu服务器上实现TCP服务器,我面临连接超时的奇怪问题。
在此服务器中,客户端应保持连接很长时间而不发送任何似乎没问题的数据:
2015-09-23 02:15:14 INFO ChannelInboundHandlerAdapter:42 - data
2015-09-23 02:45:14 INFO ChannelInboundHandlerAdapter:42 - data
此处的客户端能够在30分钟不活动后发送两条消息,没有任何问题。但在这种情况下:
2015-09-23 03:15:14 INFO ChannelInboundHandlerAdapter:42 - data
2015-09-23 03:26:47 INFO ChannelInboundHandlerAdapter:155 - Connection timed out
即使客户端只停留了10分钟而没有发送任何消息,服务器也会连接超时的连接。
这是Netty的配置:
public static void main(String args[]) {
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch)
throws Exception {
ch.pipeline().addLast(
"frameDecoder",
new DelimiterBasedFrameDecoder(
Integer.MAX_VALUE, Delimiters
.lineDelimiter()));
ch.pipeline().addLast(new GpsMessageHandler());
}
})
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
ChannelFuture f = b.bind(port).await();
f.channel().closeFuture().syncUninterruptibly();
}
catch (Exception e) {
}
finally {
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
}
我检查了iptables防火墙,一切似乎都没问题(所有端口都已打开)。
任何帮助将不胜感激..
答案 0 :(得分:0)
childOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, 7000)
此选项处理来自客户端的每条消息的超时。但在你的情况下,
ChannelFuture f = b.bind().sync();
也许有帮助