3

サーバーへの多数のアクティブな接続を取得するのは本当ですか? 私は単純な 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();
    }
}   
4

1 に答える 1