java - 如何跟踪netty服务器中打开连接的确切数量

标签 java netty

我有一个关于 netty 服务器监控的问题。我想查看有多少个与服务器的打开连接,因此我们有一个代码,该代码具有一个原子整数计数器,该计数器在 ChannelInitializer.initChannel(..) 方法上加 1,并在 closeFuture 监听器中减 1那个 SocketChannel channel 。由于某种我无法弄清楚的原因,它不会变为零并在重负载下保持正值。我希望也许有更好的方法来跟踪这些开放 channel ?

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

更新: 因此,在客户端停止发送流量并断开连接后,该数字仍保持正值。

最佳答案

一种方法是添加 ChannelInboundHandler 并覆盖 channelRegisteredchannelUnregistered,如下所示:

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

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

另一种方法是仅在注册时将 channel 添加到 ChannelGroup 中,并在想要查询当前连接数时使用 ChannelGroup#size

我猜前者会产生较少的开销,但如果您无论如何都需要此类功能,则后者允许您在所有 Activity channel 上执行操作。

关于java - 如何跟踪netty服务器中打开连接的确切数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58556947/

相关文章:

java - 在 jython 中使用枚举

javascript - 如何获得后退按钮链接以返回原始搜索页面?

java - 如何检查 HTTPS 连接的 SSL 配置是否有效?

java - Netty,如何在不使用 4.0.0 alpha 版本之一的情况下读取分块的 HTTP 响应?

java - 更改 Java 中的 mouseless-modifier?

java - 从android中的String数组中删除一个元素

java - 使用 Netty 访问 MySql 数据库

java - ConcurrentIdentityWeakKeyHashMap 和整数键

java - 剖析 Netty 性能

exception - Netty 服务器绑定(bind)异常