mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-24 18:04:54 +08:00
add options
This commit is contained in:
parent
1b80ed49e8
commit
d63410e432
@ -30,7 +30,7 @@ public class ServerConfig {
|
||||
*
|
||||
* @return 配置
|
||||
*/
|
||||
public static ServerConfig of(){
|
||||
public static ServerConfig of() {
|
||||
return new ServerConfig();
|
||||
}
|
||||
|
||||
@ -39,6 +39,13 @@ public class ServerConfig {
|
||||
private String root;
|
||||
private SSLContext sslContext;
|
||||
|
||||
private int maxHeaderSize;
|
||||
private long maxBodySize;
|
||||
private int coreThreads;
|
||||
private int maxThreads;
|
||||
private long idleTimeout;
|
||||
|
||||
|
||||
/**
|
||||
* 获取服务器地址,默认127.0.0.1
|
||||
*
|
||||
@ -118,4 +125,104 @@ public class ServerConfig {
|
||||
this.sslContext = sslContext;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最大请求(响应)头大小
|
||||
*
|
||||
* @return maxHeaderSize 最大请求(响应)头大小
|
||||
*/
|
||||
public int getMaxHeaderSize() {
|
||||
return maxHeaderSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置最大请求(响应)头大小
|
||||
*
|
||||
* @param maxHeaderSize 最大请求(响应)头大小
|
||||
* @return this
|
||||
*/
|
||||
public ServerConfig setMaxHeaderSize(final int maxHeaderSize) {
|
||||
this.maxHeaderSize = maxHeaderSize;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最大消息体大小
|
||||
*
|
||||
* @return maxBodySize 最大消息体大小
|
||||
*/
|
||||
public long getMaxBodySize() {
|
||||
return maxBodySize;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置最大消息体大小
|
||||
*
|
||||
* @param maxBodySize 最大消息体大小
|
||||
* @return this
|
||||
*/
|
||||
public ServerConfig setMaxBodySize(final long maxBodySize) {
|
||||
this.maxBodySize = maxBodySize;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取核心线程数
|
||||
*
|
||||
* @return coreThreads 核心线程数
|
||||
*/
|
||||
public int getCoreThreads() {
|
||||
return coreThreads;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置核心线程数
|
||||
*
|
||||
* @param coreThreads 核心线程数
|
||||
* @return this
|
||||
*/
|
||||
public ServerConfig setCoreThreads(final int coreThreads) {
|
||||
this.coreThreads = coreThreads;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最大线程数
|
||||
*
|
||||
* @return maxThreads 最大线程数
|
||||
*/
|
||||
public int getMaxThreads() {
|
||||
return maxThreads;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置最大线程数
|
||||
*
|
||||
* @param maxThreads 最大线程数
|
||||
* @return this
|
||||
*/
|
||||
public ServerConfig setMaxThreads(final int maxThreads) {
|
||||
this.maxThreads = maxThreads;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取空闲超时时间
|
||||
*
|
||||
* @return idleTimeout 空闲超时时间
|
||||
*/
|
||||
public long getIdleTimeout() {
|
||||
return idleTimeout;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置空闲超时时间
|
||||
*
|
||||
* @param idleTimeout 空闲超时时间
|
||||
* @return this
|
||||
*/
|
||||
public ServerConfig setIdleTimeout(final long idleTimeout) {
|
||||
this.idleTimeout = idleTimeout;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ import org.dromara.hutool.http.server.engine.AbstractServerEngine;
|
||||
import org.eclipse.jetty.http.HttpVersion;
|
||||
import org.eclipse.jetty.server.*;
|
||||
import org.eclipse.jetty.util.ssl.SslContextFactory;
|
||||
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
|
||||
@ -91,8 +92,25 @@ public class JettyEngine extends AbstractServerEngine {
|
||||
}
|
||||
|
||||
final ServerConfig config = this.config;
|
||||
final Server server = new Server();
|
||||
server.addConnector(createConnector(server, config));
|
||||
|
||||
// 线程池
|
||||
final QueuedThreadPool threadPool = new QueuedThreadPool();
|
||||
threadPool.setName("Hutool");
|
||||
final int coreThreads = config.getCoreThreads();
|
||||
if(coreThreads > 0){
|
||||
threadPool.setMinThreads(coreThreads);
|
||||
}
|
||||
final int maxThreads = config.getMaxThreads();
|
||||
if(maxThreads > 0){
|
||||
threadPool.setMaxThreads(maxThreads);
|
||||
}
|
||||
final long idleTimeout = config.getIdleTimeout();
|
||||
if(idleTimeout > 0){
|
||||
threadPool.setIdleTimeout((int) idleTimeout);
|
||||
}
|
||||
|
||||
final Server server = new Server(threadPool);
|
||||
server.addConnector(createConnector(server));
|
||||
server.setHandler(ObjUtil.defaultIfNull(this.jettyHandler,
|
||||
() -> new Jetty9Handler(this.handler)));
|
||||
this.server = server;
|
||||
@ -102,14 +120,19 @@ public class JettyEngine extends AbstractServerEngine {
|
||||
* 创建连接器
|
||||
*
|
||||
* @param server 服务器
|
||||
* @param config 配置
|
||||
* @return 连接器
|
||||
*/
|
||||
private ServerConnector createConnector(final Server server, final ServerConfig config) {
|
||||
private ServerConnector createConnector(final Server server) {
|
||||
final ServerConnector connector;
|
||||
final ServerConfig config = this.config;
|
||||
|
||||
// 配置
|
||||
final HttpConfiguration configuration = new HttpConfiguration();
|
||||
final int maxHeaderSize = config.getMaxHeaderSize();
|
||||
if(maxHeaderSize > 0){
|
||||
configuration.setRequestHeaderSize(maxHeaderSize);
|
||||
}
|
||||
|
||||
final HttpConnectionFactory httpFactory = new HttpConnectionFactory(configuration);
|
||||
|
||||
final SSLContext sslContext = config.getSslContext();
|
||||
@ -124,6 +147,10 @@ public class JettyEngine extends AbstractServerEngine {
|
||||
connector = new ServerConnector(server, httpFactory);
|
||||
}
|
||||
|
||||
final long idleTimeout = config.getIdleTimeout();
|
||||
if(idleTimeout > 0){
|
||||
connector.setIdleTimeout(idleTimeout);
|
||||
}
|
||||
connector.setHost(config.getHost());
|
||||
connector.setPort(config.getPort());
|
||||
|
||||
|
@ -20,9 +20,9 @@ import com.sun.net.httpserver.*;
|
||||
import org.dromara.hutool.core.collection.CollUtil;
|
||||
import org.dromara.hutool.core.io.IORuntimeException;
|
||||
import org.dromara.hutool.core.text.StrUtil;
|
||||
import org.dromara.hutool.core.thread.GlobalThreadPool;
|
||||
import org.dromara.hutool.http.server.engine.AbstractServerEngine;
|
||||
import org.dromara.hutool.core.thread.ExecutorBuilder;
|
||||
import org.dromara.hutool.http.server.ServerConfig;
|
||||
import org.dromara.hutool.http.server.engine.AbstractServerEngine;
|
||||
import org.dromara.hutool.http.server.engine.sun.filter.HttpFilter;
|
||||
import org.dromara.hutool.http.server.engine.sun.filter.SimpleFilter;
|
||||
|
||||
@ -157,7 +157,23 @@ public class SunHttpServerEngine extends AbstractServerEngine {
|
||||
} catch (final IOException e) {
|
||||
throw new IORuntimeException(e);
|
||||
}
|
||||
setExecutor(GlobalThreadPool.getExecutor());
|
||||
|
||||
// 线程池
|
||||
final int coreThreads = config.getCoreThreads();
|
||||
final ExecutorBuilder executorBuilder = ExecutorBuilder.of();
|
||||
if(coreThreads > 0){
|
||||
executorBuilder.setCorePoolSize(coreThreads);
|
||||
}
|
||||
final int maxThreads = config.getMaxThreads();
|
||||
if(maxThreads > 0){
|
||||
executorBuilder.setMaxPoolSize(maxThreads);
|
||||
}
|
||||
final long idleTimeout = config.getIdleTimeout();
|
||||
if(idleTimeout > 0){
|
||||
executorBuilder.setKeepAliveTime(idleTimeout);
|
||||
}
|
||||
|
||||
setExecutor(executorBuilder.build());
|
||||
createContext("/", exchange -> SunHttpServerEngine.this.handler.handle(
|
||||
new SunServerRequest(exchange),
|
||||
new SunServerResponse(exchange)
|
||||
|
@ -23,14 +23,13 @@ import org.apache.catalina.connector.Request;
|
||||
import org.apache.catalina.connector.Response;
|
||||
import org.apache.catalina.startup.Tomcat;
|
||||
import org.apache.catalina.valves.ValveBase;
|
||||
import org.apache.coyote.http11.Http11NioProtocol;
|
||||
import org.dromara.hutool.core.lang.Assert;
|
||||
import org.dromara.hutool.core.text.StrUtil;
|
||||
import org.dromara.hutool.http.HttpException;
|
||||
import org.dromara.hutool.http.server.ServerConfig;
|
||||
import org.dromara.hutool.http.server.engine.AbstractServerEngine;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Tomcat引擎实现
|
||||
*
|
||||
@ -103,8 +102,24 @@ public class TomcatEngine extends AbstractServerEngine {
|
||||
* @param tomcat Tomcat
|
||||
*/
|
||||
private void initConnector(final Tomcat tomcat) {
|
||||
final Connector connector = new Connector();
|
||||
final ServerConfig config = this.config;
|
||||
final Http11NioProtocol protocol = new Http11NioProtocol();
|
||||
final int maxHeaderSize = config.getMaxHeaderSize();
|
||||
if(maxHeaderSize > 0){
|
||||
protocol.setMaxHttpHeaderSize(maxHeaderSize);
|
||||
}
|
||||
final int maxThreads = config.getMaxThreads();
|
||||
if(maxThreads > 0){
|
||||
protocol.setMaxThreads(maxThreads);
|
||||
}
|
||||
|
||||
final Connector connector = new Connector(protocol);
|
||||
connector.setPort(config.getPort());
|
||||
final int maxBodySize = (int) config.getMaxBodySize();
|
||||
if(maxBodySize > 0){
|
||||
connector.setMaxPostSize(maxBodySize);
|
||||
}
|
||||
|
||||
tomcat.setConnector(connector);
|
||||
}
|
||||
|
||||
@ -117,9 +132,9 @@ public class TomcatEngine extends AbstractServerEngine {
|
||||
final Context context = tomcat.addContext(StrUtil.EMPTY, null);
|
||||
context.getPipeline().addValve(new ValveBase() {
|
||||
@Override
|
||||
public void invoke(final Request request, final Response response) throws IOException, ServletException {
|
||||
public void invoke(final Request request, final Response response) {
|
||||
handler.handle(new TomcatRequest(request), new TomcatResponse(response));
|
||||
getNext().invoke(request, response);
|
||||
//getNext().invoke(request, response);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -17,7 +17,9 @@
|
||||
package org.dromara.hutool.http.server.engine.undertow;
|
||||
|
||||
import io.undertow.Undertow;
|
||||
import io.undertow.UndertowOptions;
|
||||
import org.dromara.hutool.core.lang.Assert;
|
||||
import org.dromara.hutool.http.server.ServerConfig;
|
||||
import org.dromara.hutool.http.server.engine.AbstractServerEngine;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
@ -71,12 +73,36 @@ public class UndertowEngine extends AbstractServerEngine {
|
||||
new UndertowResponse(exchange));
|
||||
});
|
||||
|
||||
final SSLContext sslContext = this.config.getSslContext();
|
||||
if(null != sslContext){
|
||||
builder.addHttpsListener(this.config.getPort(), this.config.getHost(), sslContext);
|
||||
}else{
|
||||
builder.addHttpListener(this.config.getPort(), this.config.getHost());
|
||||
final ServerConfig config = this.config;
|
||||
// 选项
|
||||
final int maxHeaderSize = config.getMaxHeaderSize();
|
||||
if(maxHeaderSize > 0){
|
||||
builder.setServerOption(UndertowOptions.MAX_HEADER_SIZE, maxHeaderSize);
|
||||
}
|
||||
final long maxBodySize = config.getMaxBodySize();
|
||||
if(maxBodySize > 0){
|
||||
builder.setServerOption(UndertowOptions.MAX_ENTITY_SIZE, maxBodySize);
|
||||
}
|
||||
final long idleTimeout = config.getIdleTimeout();
|
||||
if(idleTimeout > 0){
|
||||
builder.setServerOption(UndertowOptions.IDLE_TIMEOUT, (int)idleTimeout);
|
||||
}
|
||||
final int coreThreads = config.getCoreThreads();
|
||||
if(coreThreads > 0){
|
||||
builder.setIoThreads(coreThreads);
|
||||
}
|
||||
final int maxThreads = config.getMaxThreads();
|
||||
if(maxThreads > 0){
|
||||
builder.setWorkerThreads(maxThreads);
|
||||
}
|
||||
|
||||
final SSLContext sslContext = config.getSslContext();
|
||||
if(null != sslContext){
|
||||
builder.addHttpsListener(config.getPort(), config.getHost(), sslContext);
|
||||
}else{
|
||||
builder.addHttpListener(config.getPort(), config.getHost());
|
||||
}
|
||||
|
||||
this.undertow = builder.build();
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ import org.dromara.hutool.core.lang.Console;
|
||||
import org.dromara.hutool.http.server.ServerConfig;
|
||||
|
||||
public class JettyTest {
|
||||
public static void main(String[] args) {
|
||||
public static void main(final String[] args) {
|
||||
final ServerEngine engine = ServerEngineFactory.createEngine("jetty");
|
||||
engine.init(ServerConfig.of());
|
||||
engine.setHandler((request, response) -> {
|
||||
|
Loading…
Reference in New Issue
Block a user