From 9f8e946ea35a34768bdf810a079e17096223d669 Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Sat, 16 May 2020 22:40:41 +0800 Subject: [PATCH] --- src/org/redkale/net/Transport.java | 40 +++++++++++++++++++----------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/org/redkale/net/Transport.java b/src/org/redkale/net/Transport.java index 4e5b705e7..e2c087fdf 100644 --- a/src/org/redkale/net/Transport.java +++ b/src/org/redkale/net/Transport.java @@ -81,23 +81,35 @@ public final class Transport { public final InetSocketAddress[] updateRemoteAddresses(final Collection addresses) { final TransportNode[] oldNodes = this.transportNodes; synchronized (this) { - List list = new ArrayList<>(); - if (addresses != null) { - for (InetSocketAddress addr : addresses) { - if (clientAddress != null && clientAddress.equals(addr)) continue; - boolean hasold = false; - for (TransportNode oldAddr : oldNodes) { - if (oldAddr.getAddress().equals(addr)) { - list.add(oldAddr); - hasold = true; - break; - } + boolean same = false; + if (this.transportNodes != null && addresses != null && this.transportNodes.length == addresses.size()) { + same = true; + for (TransportNode node : this.transportNodes) { + if (!addresses.contains(node.getAddress())) { + same = false; + break; } - if (hasold) continue; - list.add(new TransportNode(factory.poolmaxconns, addr)); } } - this.transportNodes = list.toArray(new TransportNode[list.size()]); + if (!same) { + List list = new ArrayList<>(); + if (addresses != null) { + for (InetSocketAddress addr : addresses) { + if (clientAddress != null && clientAddress.equals(addr)) continue; + boolean hasold = false; + for (TransportNode oldAddr : oldNodes) { + if (oldAddr.getAddress().equals(addr)) { + list.add(oldAddr); + hasold = true; + break; + } + } + if (hasold) continue; + list.add(new TransportNode(factory.poolmaxconns, addr)); + } + } + this.transportNodes = list.toArray(new TransportNode[list.size()]); + } } InetSocketAddress[] rs = new InetSocketAddress[oldNodes.length]; for (int i = 0; i < rs.length; i++) {