From 3bba78118336979558973d8791fcf56db6ea5b98 Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Thu, 13 Dec 2018 13:47:44 +0800 Subject: [PATCH] =?UTF-8?q?WATCH=E6=9C=8D=E5=8A=A1=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=9A=E6=9B=B4=E6=94=B9Server=E7=9A=84?= =?UTF-8?q?=E7=9B=91=E5=90=AC=E5=9C=B0=E5=9D=80=E5=92=8C=E7=AB=AF=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boot/watch/ServerWatchService.java | 24 +++++++ src/org/redkale/net/Context.java | 42 +++++------ src/org/redkale/net/Server.java | 71 ++++++++++++++++++- 3 files changed, 115 insertions(+), 22 deletions(-) diff --git a/src/org/redkale/boot/watch/ServerWatchService.java b/src/org/redkale/boot/watch/ServerWatchService.java index 893c8f5f8..4285a8f66 100644 --- a/src/org/redkale/boot/watch/ServerWatchService.java +++ b/src/org/redkale/boot/watch/ServerWatchService.java @@ -5,6 +5,8 @@ */ package org.redkale.boot.watch; +import java.io.IOException; +import java.net.InetSocketAddress; import java.util.*; import java.util.stream.Stream; import javax.annotation.Resource; @@ -24,6 +26,9 @@ public class ServerWatchService extends AbstractWatchService { @Comment("不存在的Server节点") public static final int RET_SERVER_NOT_EXISTS = 1602_0001; + @Comment("更改Server监听地址端口失败") + public static final int RET_SERVER_CHANGEPORT_ERROR = 1602_0002; + @Resource protected Application application; @@ -45,6 +50,25 @@ public class ServerWatchService extends AbstractWatchService { return new RetResult(rs); } + @RestMapping(name = "changeaddress", comment = "更改Server的监听地址和端口") + public RetResult changeAddress(@RestParam(name = "#port:") final int oldport, + @RestParam(name = "#newhost:") final String newhost, @RestParam(name = "#newport:") final int newport) { + if (oldport < 1) return new RetResult(RET_WATCH_PARAMS_ILLEGAL, "not found param `oldport`"); + if (newport < 1) return new RetResult(RET_WATCH_PARAMS_ILLEGAL, "not found param `newport`"); + Stream stream = application.getNodeServers().stream(); + NodeServer node = stream.filter(ns -> ns.getServer().getSocketAddress().getPort() == oldport).findFirst().orElse(null); + if (node == null) return new RetResult(RET_SERVER_NOT_EXISTS, "Server(port=" + oldport + ") not found"); + final Server server = node.getServer(); + InetSocketAddress newAddr = new InetSocketAddress(newhost == null || newhost.isEmpty() ? server.getSocketAddress().getHostString() : newhost, newport); + try { + server.changeAddress(newAddr); + } catch (IOException e) { + e.printStackTrace(); + return new RetResult(RET_SERVER_CHANGEPORT_ERROR, "changeaddress error"); + } + return RetResult.success(); + } + private Map formatToMap(NodeServer node) { Server server = node.getServer(); Map rs = new LinkedHashMap<>(); diff --git a/src/org/redkale/net/Context.java b/src/org/redkale/net/Context.java index 64e049c65..d01b9fccf 100644 --- a/src/org/redkale/net/Context.java +++ b/src/org/redkale/net/Context.java @@ -47,27 +47,6 @@ public class Context { //服务的根Servlet protected final PrepareServlet prepare; - //服务的监听地址 - private final InetSocketAddress address; - - //字符集 - protected final Charset charset; - - //最大连接数, 为0表示没限制 - protected final int maxconns; - - //请求内容的大小上限, 默认64K - protected final int maxbody; - - //keep alive IO读取的超时时间 - protected final int aliveTimeoutSeconds; - - //IO读取的超时时间 - protected final int readTimeoutSeconds; - - //IO写入的超时时间 - protected final int writeTimeoutSeconds; - //日志Logger protected final Logger logger; @@ -80,6 +59,27 @@ public class Context { //依赖注入工厂类 protected final ResourceFactory resourceFactory; + //最大连接数, 为0表示没限制 + protected int maxconns; + + //请求内容的大小上限, 默认64K + protected int maxbody; + + //keep alive IO读取的超时时间 + protected int aliveTimeoutSeconds; + + //IO读取的超时时间 + protected int readTimeoutSeconds; + + //IO写入的超时时间 + protected int writeTimeoutSeconds; + + //服务的监听地址 + protected InetSocketAddress address; + + //字符集 + protected Charset charset; + public Context(ContextConfig config) { this(config.serverStartTime, config.logger, config.executor, config.sslContext, config.bufferCapacity, config.bufferPool, config.responsePool, config.maxconns, config.maxbody, diff --git a/src/org/redkale/net/Server.java b/src/org/redkale/net/Server.java index b24b3caa3..66ec31c04 100644 --- a/src/org/redkale/net/Server.java +++ b/src/org/redkale/net/Server.java @@ -12,8 +12,9 @@ import java.text.*; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Logger; +import java.util.logging.*; import javax.net.ssl.SSLContext; +import org.redkale.net.Filter; import org.redkale.util.*; /** @@ -287,6 +288,74 @@ public abstract class Server