From 145527db38ce152e3e1397cbf1851c93c2f1f4cc Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Tue, 23 May 2017 19:45:52 +0800 Subject: [PATCH] --- src/org/redkale/net/AsyncConnection.java | 15 ++++++++ src/org/redkale/net/ProtocolServer.java | 47 +++++++++++++++++++++++- src/org/redkale/net/Server.java | 15 ++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) diff --git a/src/org/redkale/net/AsyncConnection.java b/src/org/redkale/net/AsyncConnection.java index 17607ae34..06db74e20 100644 --- a/src/org/redkale/net/AsyncConnection.java +++ b/src/org/redkale/net/AsyncConnection.java @@ -11,6 +11,7 @@ import java.nio.ByteBuffer; import java.nio.channels.*; import java.util.*; import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicLong; /** * @@ -25,6 +26,12 @@ public abstract class AsyncConnection implements AsynchronousByteChannel, AutoCl protected Object subobject; //用于存储绑定在Connection上的对象, 同attributes, 只绑定单个对象时尽量使用subobject而非attributes + //关闭数 + AtomicLong closedCounter = new AtomicLong(); + + //在线数 + AtomicLong livingCounter = new AtomicLong(); + public abstract boolean isTCP(); public abstract SocketAddress getRemoteAddress(); @@ -54,6 +61,14 @@ public abstract class AsyncConnection implements AsynchronousByteChannel, AutoCl @Override public void close() throws IOException { + if (closedCounter != null) { + closedCounter.incrementAndGet(); + closedCounter = null; + } + if (livingCounter != null) { + livingCounter.decrementAndGet(); + livingCounter = null; + } if (attributes == null) return; try { for (Object obj : attributes.values()) { diff --git a/src/org/redkale/net/ProtocolServer.java b/src/org/redkale/net/ProtocolServer.java index 5003c6e6d..dd3eaa3d1 100644 --- a/src/org/redkale/net/ProtocolServer.java +++ b/src/org/redkale/net/ProtocolServer.java @@ -11,15 +11,27 @@ import java.nio.ByteBuffer; import java.nio.channels.*; import java.util.*; import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicLong; /** * 协议底层Server * - *

详情见: https://redkale.org + *

+ * 详情见: https://redkale.org + * * @author zhangjx */ public abstract class ProtocolServer { + //创建数 + protected final AtomicLong createCounter = new AtomicLong(); + + //关闭数 + protected final AtomicLong closedCounter = new AtomicLong(); + + //在线数 + protected final AtomicLong livingCounter = new AtomicLong(); + public abstract void open() throws IOException; public abstract void bind(SocketAddress local, int backlog) throws IOException; @@ -34,6 +46,18 @@ public abstract class ProtocolServer { public abstract AsynchronousChannelGroup getChannelGroup(); + public long getCreateCount() { + return createCounter.longValue(); + } + + public long getClosedCount() { + return closedCounter.longValue(); + } + + public long getLivingCount() { + return livingCounter.longValue(); + } + //--------------------------------------------------------------------- public static ProtocolServer create(String protocol, Context context) { if ("TCP".equalsIgnoreCase(protocol)) return new ProtocolTCPServer(context); @@ -117,6 +141,20 @@ public abstract class ProtocolServer { return null; } + @Override + public long getCreateCount() { + return -1; + } + + @Override + public long getClosedCount() { + return -1; + } + + @Override + public long getLivingCount() { + return -1; + } } private static final class ProtocolTCPServer extends ProtocolServer { @@ -160,7 +198,12 @@ public abstract class ProtocolServer { @Override public void completed(final AsynchronousSocketChannel channel, Void attachment) { serchannel.accept(null, this); - context.submitAsync(new PrepareRunner(context, AsyncConnection.create(channel, null, context.readTimeoutSecond, context.writeTimeoutSecond), null)); + createCounter.incrementAndGet(); + livingCounter.incrementAndGet(); + AsyncConnection conn = AsyncConnection.create(channel, null, context.readTimeoutSecond, context.writeTimeoutSecond); + conn.livingCounter = livingCounter; + conn.closedCounter = closedCounter; + context.submitAsync(new PrepareRunner(context, conn, null)); } @Override diff --git a/src/org/redkale/net/Server.java b/src/org/redkale/net/Server.java index 8b460c80e..af9295b73 100644 --- a/src/org/redkale/net/Server.java +++ b/src/org/redkale/net/Server.java @@ -185,6 +185,21 @@ public abstract class Server 10) sf = "00";