Как отследить точное количество открытых соединений на нетти-сервере - PullRequest
0 голосов
/ 25 октября 2019

У меня вопрос по поводу мониторинга сервера netty. Я хочу посмотреть, сколько существует открытых соединений с сервером, поэтому для этого у нас есть код с целочисленным атомарным счетчиком, который увеличивается на 1 в методе ChannelInitializer.initChannel (..) и уменьшается на 1 в слушателе closeFuture дляэтот канал SocketChannel. По какой-то причине, которую я не могу понять, он не падает до нуля и остается положительным при большой нагрузке. Я надеялся, что, может быть, есть какой-то лучший способ отслеживания этих открытых каналов?

  @Override
  protected void initChannel(SocketChannel channel) throws Exception {
          currentConnections.incrementAndGet();
          channel.closeFuture().addListener(f -> currentConnections.decrementAndGet());
  }

ОБНОВЛЕНИЕ: Таким образом, число остается положительным после того, как клиенты перестают отправлять трафик и отключаются.

1 Ответ

0 голосов
/ 27 октября 2019

Один из способов - добавить ChannelInboundHandler и переопределить channelRegistered и channelUnregistered следующим образом:

  @Override
  public void channelRegistered(final ChannelHandlerContext ctx) {
    if (ctx.channel().remoteAddress() != null) {
      connections.inc();
    }
  }

  @Override
  public void channelUnregistered(final ChannelHandlerContext ctx) {
    currentConnections.dec();
  }

Другой способ - добавить канал в ChannelGroup только после его регистрации. и используйте ChannelGroup#size, когда вы хотите запросить текущее количество соединений.

Я полагаю, что первое требует меньших накладных расходов, но последнее позволяет вам выполнять действия на всех активных каналах, если вам все равно нужна такая функциональность.

...