【问题标题】:How to correctly close netty channel without workgroup termination如何在没有工作组终止的情况下正确关闭 netty 通道
【发布时间】:2021-03-26 02:55:13
【问题描述】:

我有以下绑定来处理 UDP 数据包

 private void doStartServer() {
        final UDPPacketHandler udpPacketHandler = new UDPPacketHandler(messageDecodeHandler);
        workerGroup = new NioEventLoopGroup(threadPoolSize);

        try {
            final Bootstrap bootstrap = new Bootstrap();
            bootstrap
                .group(workerGroup)
                .handler(new LoggingHandler(nettyLevel))
                .channel(NioDatagramChannel.class)
                .option(ChannelOption.SO_BROADCAST, true)
                .handler(udpPacketHandler);

            bootstrap
                .bind(serverIp, serverPort)
                .sync()
                .channel()
                .closeFuture()
                .await();
        } finally {
            stop();
        }
    }

和处理程序

@ChannelHandler.Sharable    << note this
@Slf4j
@AllArgsConstructor
public class UDPPacketHandler extends SimpleChannelInboundHandler<DatagramPacket> {

    private final MessageP54Handler messageP54Handler;

    @Override
    public void channelReadComplete(final ChannelHandlerContext ctx) {
        ctx.flush();
    }

    @Override
    public void exceptionCaught(final ChannelHandlerContext ctx, final Throwable cause) {
        log.error("Exception in UDP handler", cause);
        ctx.close();
    }
}

在某些时候,我得到了这个异常java.net.SocketException: Network dropped connection on reset: no further information,它在exceptionCaught 中处理。这会触发ChannelHandlerContext 关闭。在这一点上,我的整个服务器都停止了(在第一个 sn-p 的 finnaly 块上执行)

如何正确处理异常,以便即使在发生此类异常后也可以处理新连接?

【问题讨论】:

    标签: java udp netty socketexception


    【解决方案1】:

    在使用DatagramChannel 时,不应关闭IOException 上的ChannelHandlerContext。由于DatagramChannel 是“无连接”,因此该异常特定于一个“接收”或一个“发送”操作。所以只需记录它(或任何你想做的事情)然后继续。

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      相关资源
      最近更新 更多