获取与服务器的多个活动连接是否真实? 我写了一个简单的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();
}
}
答案 0 :(得分:1)
您的解决方案看起来不错。它很可能是StatusData中的一个错误,就像不使用AtomicLong一样。