我有一个关于 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
并覆盖 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();
}
另一种方法是仅在注册时将 channel 添加到 ChannelGroup
中,并在想要查询当前连接数时使用 ChannelGroup#size
。
我猜前者会产生较少的开销,但如果您无论如何都需要此类功能,则后者允许您在所有 Activity channel 上执行操作。
关于java - 如何跟踪netty服务器中打开连接的确切数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58556947/