This commit is contained in:
@@ -11,6 +11,7 @@ import java.nio.ByteBuffer;
|
|||||||
import java.nio.channels.*;
|
import java.nio.channels.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.*;
|
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
|
protected Object subobject; //用于存储绑定在Connection上的对象, 同attributes, 只绑定单个对象时尽量使用subobject而非attributes
|
||||||
|
|
||||||
|
//关闭数
|
||||||
|
AtomicLong closedCounter = new AtomicLong();
|
||||||
|
|
||||||
|
//在线数
|
||||||
|
AtomicLong livingCounter = new AtomicLong();
|
||||||
|
|
||||||
public abstract boolean isTCP();
|
public abstract boolean isTCP();
|
||||||
|
|
||||||
public abstract SocketAddress getRemoteAddress();
|
public abstract SocketAddress getRemoteAddress();
|
||||||
@@ -54,6 +61,14 @@ public abstract class AsyncConnection implements AsynchronousByteChannel, AutoCl
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() throws IOException {
|
public void close() throws IOException {
|
||||||
|
if (closedCounter != null) {
|
||||||
|
closedCounter.incrementAndGet();
|
||||||
|
closedCounter = null;
|
||||||
|
}
|
||||||
|
if (livingCounter != null) {
|
||||||
|
livingCounter.decrementAndGet();
|
||||||
|
livingCounter = null;
|
||||||
|
}
|
||||||
if (attributes == null) return;
|
if (attributes == null) return;
|
||||||
try {
|
try {
|
||||||
for (Object obj : attributes.values()) {
|
for (Object obj : attributes.values()) {
|
||||||
|
|||||||
@@ -11,15 +11,27 @@ import java.nio.ByteBuffer;
|
|||||||
import java.nio.channels.*;
|
import java.nio.channels.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 协议底层Server
|
* 协议底层Server
|
||||||
*
|
*
|
||||||
* <p> 详情见: https://redkale.org
|
* <p>
|
||||||
|
* 详情见: https://redkale.org
|
||||||
|
*
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
*/
|
*/
|
||||||
public abstract class ProtocolServer {
|
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 open() throws IOException;
|
||||||
|
|
||||||
public abstract void bind(SocketAddress local, int backlog) 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 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) {
|
public static ProtocolServer create(String protocol, Context context) {
|
||||||
if ("TCP".equalsIgnoreCase(protocol)) return new ProtocolTCPServer(context);
|
if ("TCP".equalsIgnoreCase(protocol)) return new ProtocolTCPServer(context);
|
||||||
@@ -117,6 +141,20 @@ public abstract class ProtocolServer {
|
|||||||
return null;
|
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 {
|
private static final class ProtocolTCPServer extends ProtocolServer {
|
||||||
@@ -160,7 +198,12 @@ public abstract class ProtocolServer {
|
|||||||
@Override
|
@Override
|
||||||
public void completed(final AsynchronousSocketChannel channel, Void attachment) {
|
public void completed(final AsynchronousSocketChannel channel, Void attachment) {
|
||||||
serchannel.accept(null, this);
|
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
|
@Override
|
||||||
|
|||||||
@@ -185,6 +185,21 @@ public abstract class Server<K extends Serializable, C extends Context, R extend
|
|||||||
logger.info(this.getClass().getSimpleName() + " shutdown in " + e + " ms");
|
logger.info(this.getClass().getSimpleName() + " shutdown in " + e + " ms");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//创建数
|
||||||
|
public long getCreateConnectionCount() {
|
||||||
|
return serverChannel == null ? -1 : serverChannel.getCreateCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
//关闭数
|
||||||
|
public long getClosedConnectionCount() {
|
||||||
|
return serverChannel == null ? -1 : serverChannel.getClosedCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
//在线数
|
||||||
|
public long getLivingConnectionCount() {
|
||||||
|
return serverChannel == null ? -1 : serverChannel.getLivingCount();
|
||||||
|
}
|
||||||
|
|
||||||
protected Format createFormat() {
|
protected Format createFormat() {
|
||||||
String sf = "0";
|
String sf = "0";
|
||||||
if (this.threads > 10) sf = "00";
|
if (this.threads > 10) sf = "00";
|
||||||
|
|||||||
Reference in New Issue
Block a user