命名优化

This commit is contained in:
redkale
2023-01-30 22:29:13 +08:00
parent afaf97aaf8
commit e47abd6417
5 changed files with 32 additions and 15 deletions

View File

@@ -42,7 +42,7 @@ public class Context {
protected final int bufferCapacity; protected final int bufferCapacity;
//服务的根Servlet //服务的根Servlet
protected final DispatcherServlet prepare; protected final DispatcherServlet dispatcher;
//日志Logger //日志Logger
protected final Logger logger; protected final Logger logger;
@@ -80,12 +80,12 @@ public class Context {
public Context(ContextConfig config) { public Context(ContextConfig config) {
this(config.serverStartTime, config.logger, config.workExecutor, config.sslBuilder, config.sslContext, this(config.serverStartTime, config.logger, config.workExecutor, config.sslBuilder, config.sslContext,
config.bufferCapacity, config.maxConns, config.maxBody, config.charset, config.serverAddress, config.resourceFactory, config.bufferCapacity, config.maxConns, config.maxBody, config.charset, config.serverAddress, config.resourceFactory,
config.prepare, config.aliveTimeoutSeconds, config.readTimeoutSeconds, config.writeTimeoutSeconds); config.dispatcher, config.aliveTimeoutSeconds, config.readTimeoutSeconds, config.writeTimeoutSeconds);
} }
public Context(long serverStartTime, Logger logger, ExecutorService workExecutor, SSLBuilder sslBuilder, SSLContext sslContext, public Context(long serverStartTime, Logger logger, ExecutorService workExecutor, SSLBuilder sslBuilder, SSLContext sslContext,
int bufferCapacity, final int maxConns, final int maxBody, Charset charset, InetSocketAddress address, int bufferCapacity, final int maxConns, final int maxBody, Charset charset, InetSocketAddress address,
ResourceFactory resourceFactory, DispatcherServlet prepare, int aliveTimeoutSeconds, int readTimeoutSeconds, int writeTimeoutSeconds) { ResourceFactory resourceFactory, DispatcherServlet dispatcher, int aliveTimeoutSeconds, int readTimeoutSeconds, int writeTimeoutSeconds) {
this.serverStartTime = serverStartTime; this.serverStartTime = serverStartTime;
this.logger = logger; this.logger = logger;
this.workExecutor = workExecutor; this.workExecutor = workExecutor;
@@ -96,7 +96,7 @@ public class Context {
this.maxBody = maxBody; this.maxBody = maxBody;
this.charset = StandardCharsets.UTF_8.equals(charset) ? null : charset; this.charset = StandardCharsets.UTF_8.equals(charset) ? null : charset;
this.serverAddress = address; this.serverAddress = address;
this.prepare = prepare; this.dispatcher = dispatcher;
this.resourceFactory = resourceFactory; this.resourceFactory = resourceFactory;
this.aliveTimeoutSeconds = aliveTimeoutSeconds; this.aliveTimeoutSeconds = aliveTimeoutSeconds;
this.readTimeoutSeconds = readTimeoutSeconds; this.readTimeoutSeconds = readTimeoutSeconds;
@@ -112,11 +112,11 @@ public class Context {
protected void executeDispatch(Request request, Response response) { protected void executeDispatch(Request request, Response response) {
if (workHashExecutor != null) { if (workHashExecutor != null) {
workHashExecutor.execute(request.getHashid(), () -> prepare.prepare(request, response)); workHashExecutor.execute(request.getHashid(), () -> dispatcher.dispatch(request, response));
} else if (workExecutor != null) { } else if (workExecutor != null) {
workExecutor.execute(() -> prepare.prepare(request, response)); workExecutor.execute(() -> dispatcher.dispatch(request, response));
} else { } else {
prepare.prepare(request, response); dispatcher.dispatch(request, response);
} }
} }
@@ -245,7 +245,7 @@ public class Context {
public int bufferCapacity; public int bufferCapacity;
//服务的根Servlet //服务的根Servlet
public DispatcherServlet prepare; public DispatcherServlet dispatcher;
//服务的监听地址 //服务的监听地址
public InetSocketAddress serverAddress; public InetSocketAddress serverAddress;

View File

@@ -11,6 +11,7 @@ import java.util.concurrent.atomic.LongAdder;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.redkale.annotation.Async;
import org.redkale.boot.Application; import org.redkale.boot.Application;
import org.redkale.util.*; import org.redkale.util.*;
@@ -43,6 +44,8 @@ public abstract class DispatcherServlet<K extends Serializable, C extends Contex
private Map<K, S> mappings = new HashMap<>(); private Map<K, S> mappings = new HashMap<>();
private volatile boolean allFilterAsync = true;
private final List<Filter<C, R, P>> filters = new ArrayList<>(); private final List<Filter<C, R, P>> filters = new ArrayList<>();
protected Application application; protected Application application;
@@ -176,10 +179,16 @@ public abstract class DispatcherServlet<K extends Serializable, C extends Contex
filter._conf = conf; filter._conf = conf;
synchronized (filters) { synchronized (filters) {
this.filters.add(filter); this.filters.add(filter);
this.allFilterAsync = this.allFilterAsync && isAsync(filter);
Collections.sort(this.filters); Collections.sort(this.filters);
} }
} }
private boolean isAsync(Filter filter) {
Async a = filter.getClass().getAnnotation(Async.class);
return a != null && a.value();
}
public <T extends Filter<C, R, P>> T removeFilter(Class<T> filterClass) { public <T extends Filter<C, R, P>> T removeFilter(Class<T> filterClass) {
return removeFilter(f -> filterClass.equals(f.getClass())); return removeFilter(f -> filterClass.equals(f.getClass()));
} }
@@ -232,6 +241,14 @@ public abstract class DispatcherServlet<K extends Serializable, C extends Contex
} }
filter._next = null; filter._next = null;
this.filters.remove(filter); this.filters.remove(filter);
boolean async = true;
for (Filter f : filters) {
async = async && isAsync(filter);
if (!async) {
break;
}
}
this.allFilterAsync = async;
} }
return (T) filter; return (T) filter;
} }
@@ -245,7 +262,7 @@ public abstract class DispatcherServlet<K extends Serializable, C extends Contex
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public abstract void addServlet(S servlet, Object attachment, AnyValue conf, K... mappings); public abstract void addServlet(S servlet, Object attachment, AnyValue conf, K... mappings);
public final void prepare(final R request, final P response) { public final void dispatch(final R request, final P response) {
try { try {
Traces.computeCurrTraceid(request.getTraceid()); Traces.computeCurrTraceid(request.getTraceid());
request.prepare(); request.prepare();

View File

@@ -144,7 +144,7 @@ class ProtocolCodec implements CompletionHandler<Integer, ByteBuffer> {
final Request request = response.request; final Request request = response.request;
final int rs = request.readHeader(buffer, lastReq); final int rs = request.readHeader(buffer, lastReq);
if (rs < 0) { //表示数据格式不正确 if (rs < 0) { //表示数据格式不正确
final DispatcherServlet preparer = context.prepare; final DispatcherServlet preparer = context.dispatcher;
preparer.incrExecuteCounter(); preparer.incrExecuteCounter();
channel.offerReadBuffer(buffer); channel.offerReadBuffer(buffer);
if (rs != Integer.MIN_VALUE) { if (rs != Integer.MIN_VALUE) {
@@ -155,7 +155,7 @@ class ProtocolCodec implements CompletionHandler<Integer, ByteBuffer> {
context.logger.log(Level.FINEST, "request.readHeader erroneous (" + rs + "), force to close channel "); context.logger.log(Level.FINEST, "request.readHeader erroneous (" + rs + "), force to close channel ");
} }
} else if (rs == 0) { } else if (rs == 0) {
context.prepare.incrExecuteCounter(); context.dispatcher.incrExecuteCounter();
int pindex = pipelineIndex; int pindex = pipelineIndex;
boolean pipeline = false; boolean pipeline = false;
Request hreq = lastReq; Request hreq = lastReq;
@@ -223,7 +223,7 @@ class ProtocolCodec implements CompletionHandler<Integer, ByteBuffer> {
@Override @Override
public void failed(Throwable exc, ByteBuffer attachment) { public void failed(Throwable exc, ByteBuffer attachment) {
context.prepare.incrIllegalRequestCounter(); context.dispatcher.incrIllegalRequestCounter();
channel.offerReadBuffer(attachment); channel.offerReadBuffer(attachment);
response.error(exc); response.error(exc);
if (exc != null) { if (exc != null) {

View File

@@ -417,7 +417,7 @@ public abstract class Server<K extends Serializable, C extends Context, R extend
contextConfig.maxBody = this.maxBody; contextConfig.maxBody = this.maxBody;
contextConfig.charset = this.charset; contextConfig.charset = this.charset;
contextConfig.serverAddress = this.address; contextConfig.serverAddress = this.address;
contextConfig.prepare = this.dispatcher; contextConfig.dispatcher = this.dispatcher;
contextConfig.resourceFactory = this.resourceFactory; contextConfig.resourceFactory = this.resourceFactory;
contextConfig.aliveTimeoutSeconds = this.aliveTimeoutSeconds; contextConfig.aliveTimeoutSeconds = this.aliveTimeoutSeconds;
contextConfig.readTimeoutSeconds = this.readTimeoutSeconds; contextConfig.readTimeoutSeconds = this.readTimeoutSeconds;

View File

@@ -3542,7 +3542,7 @@ public final class Rest {
if (ch >= '0' && ch <= '9') { if (ch >= '0' && ch <= '9') {
continue; continue;
} }
if (ch >= 'a' && ch <= 'a') { if (ch >= 'a' && ch <= 'z') {
continue; continue;
} }
if (ch >= 'A' && ch <= 'Z') { if (ch >= 'A' && ch <= 'Z') {
@@ -3586,7 +3586,7 @@ public final class Rest {
} }
} }
this.existsPound = pound; this.existsPound = pound;
this.newMethodName = formatMappingName(this.name.replace('/', '$').replace('.', '_')); this.newMethodName = formatMappingName(this.name.replace('/', '$').replace('.', '_').replace('-', '_'));
this.newActionClassName = "_Dyn_" + this.newMethodName + "_ActionHttpServlet"; this.newActionClassName = "_Dyn_" + this.newMethodName + "_ActionHttpServlet";
} }