如何获得活动连接数?

时间:2013-10-21 21:10:25

标签: java netty

获取与服务器的多个活动连接是否真实? 我写了一个简单的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();
    }
}   

1 个答案:

答案 0 :(得分:1)

您的解决方案看起来不错。它很可能是StatusData中的一个错误,就像不使用AtomicLong一样。