【发布时间】:2015-12-20 13:17:37
【问题描述】:
我正在使用 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 防火墙,一切似乎都正常(所有端口都打开了)。
任何帮助将不胜感激..
【问题讨论】:
-
能否提供两种情况下双方初始化连接的源代码?
-
服务器一号完成..我无法提供客户端的源代码,因为它是一个GPS设备..