【问题标题】:Java Netty connection timed outJava Netty 连接超时
【发布时间】: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设备..

标签: java sockets tcp netty


【解决方案1】:
childOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, 7000)

此选项处理来自客户端的每条消息的超时。但在你的情况下,

ChannelFuture f = b.bind().sync();

也许有帮助

【讨论】:

    猜你喜欢
    • 2015-03-24
    • 2012-09-10
    • 2014-04-07
    • 2019-05-04
    • 1970-01-01
    • 2013-05-23
    • 2019-02-27
    • 2015-03-23
    • 2011-03-10
    相关资源
    最近更新 更多