サーバーへの多数のアクティブな接続を取得するのは本当ですか? 私は単純な http サーバーを書きましたが、彼が持っているアクティブな接続の数を知る必要があります。
これを試しましたが、10000回のリクエスト後に間違った結果が得られます
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
super.channelInactive(ctx);
StatusData.decreaseConnectionCounter();
}
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
super.channelActive(ctx);
log.info("Channel " + ctx.channel() + " is now active");
StatusData.increaseConnectionCounter();
}
クラスを変更して、この StatusData のようになり、100 スレッドで 10000 リクエストを生成すると正しくカウントされます。
class StatusData{
private AtomicInteger counter = new AtomicInteger();
public void increaseConnectionCounter() {
synchronized (counter){
int newValue = counter.intValue() + 1;
counter.set(newValue);
}
}
public void decreaseConnectionCounter() {
synchronized (counter){
int newValue = counter.intValue() - 1;
counter.set(newValue);
}
}
public int getActiveConnectionCounter() {
return counter.get();
}
}