From 3fbb5d37b3ca62bf4ecdce77fe969f66bdde4d7b Mon Sep 17 00:00:00 2001 From: wentch <22250530@qq.com> Date: Tue, 29 Dec 2015 11:00:25 +0800 Subject: [PATCH] --- src/org/redkale/boot/NodeHttpServer.java | 12 ++++++++++-- src/org/redkale/boot/NodeServer.java | 8 ++++---- src/org/redkale/net/http/WebSocketNode.java | 1 + src/org/redkale/service/WebSocketNodeService.java | 2 +- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/org/redkale/boot/NodeHttpServer.java b/src/org/redkale/boot/NodeHttpServer.java index 2d2544fe6..c9a6c6728 100644 --- a/src/org/redkale/boot/NodeHttpServer.java +++ b/src/org/redkale/boot/NodeHttpServer.java @@ -77,7 +77,7 @@ public final class NodeHttpServer extends NodeServer { getSncpAddress(), sncpDefaultGroups, sncpSameGroupTransports, sncpDiffGroupTransports); regFactory.register(resourceName, WebSocketNode.class, nodeService); factory.inject(nodeService, self); - logger.fine("[" + Thread.currentThread().getName() + "] Load " + nodeService); + logger.fine("[" + Thread.currentThread().getName() + "] Load Service " + nodeService); if (getSncpAddress() != null) { NodeSncpServer sncpServer = null; for (NodeServer node : application.servers) { @@ -101,7 +101,15 @@ public final class NodeHttpServer extends NodeServer { final StringBuilder sb = logger.isLoggable(Level.FINE) ? new StringBuilder() : null; final String prefix = conf == null ? "" : conf.getValue("prefix", ""); final String threadName = "[" + Thread.currentThread().getName() + "] "; - for (FilterEntry en : filter.getFilterEntrys()) { + List> list = new ArrayList(filter.getFilterEntrys()); + list.sort((FilterEntry o1, FilterEntry o2) -> { //必须保证WebSocketServlet优先加载, 因为要确保其他的HttpServlet可以注入本地模式的WebSocketNode + boolean ws1 = WebSocketServlet.class.isAssignableFrom(o1.getType()); + boolean ws2 = WebSocketServlet.class.isAssignableFrom(o2.getType()); + if (ws1 == ws2) return 0; + return ws1 ? -1 : 1; + } + ); + for (FilterEntry en : list) { Class clazz = (Class) en.getType(); if (Modifier.isAbstract(clazz.getModifiers())) continue; WebServlet ws = clazz.getAnnotation(WebServlet.class); diff --git a/src/org/redkale/boot/NodeServer.java b/src/org/redkale/boot/NodeServer.java index e8cda38fa..1011e7960 100644 --- a/src/org/redkale/boot/NodeServer.java +++ b/src/org/redkale/boot/NodeServer.java @@ -227,7 +227,7 @@ public abstract class NodeServer { ServiceWrapper wrapper = new ServiceWrapper(CacheSourceService.class, (Service) source, resourceName, getSncpGroup(), sncpDefaultGroups, null); sncpServer.getSncpServer().addService(wrapper); } - logger.fine("[" + Thread.currentThread().getName() + "] Load " + source); + logger.fine("[" + Thread.currentThread().getName() + "] Load Source " + source); } catch (Exception e) { logger.log(Level.SEVERE, "DataSource inject error", e); } @@ -319,7 +319,7 @@ public abstract class NodeServer { } Service service = Sncp.createLocalService(entry.getName(), getExecutor(), type, this.sncpAddress, groups, sameGroupTransports, diffGroupTransports); wrapper = new ServiceWrapper(type, service, this.sncpGroup, entry); - if (fine) logger.fine("[" + Thread.currentThread().getName() + "] " + service + " loaded"); + if (fine) logger.fine("[" + Thread.currentThread().getName() + "] Load Service " + service); } else { sameGroupAddrs.remove(this.sncpAddress); StringBuilder g = new StringBuilder(); @@ -331,7 +331,7 @@ public abstract class NodeServer { if (sameGroupAddrs.isEmpty()) throw new RuntimeException(type.getName() + " has no remote address on group (" + groups + ")"); Service service = Sncp.createRemoteService(entry.getName(), getExecutor(), type, this.sncpAddress, groups, loadTransport(g.toString(), server.getProtocol(), sameGroupAddrs)); wrapper = new ServiceWrapper(type, service, "", entry); - if (fine) logger.fine("[" + Thread.currentThread().getName() + "] " + service + " loaded"); + if (fine) logger.fine("[" + Thread.currentThread().getName() + "] Load Service " + service); } if (factory.find(wrapper.getName(), wrapper.getType()) == null) { regFactory.register(wrapper.getName(), wrapper.getType(), wrapper.getService()); @@ -367,7 +367,7 @@ public abstract class NodeServer { remoteServiceWrappers.forEach(y -> { factory.inject(y.getService(), NodeServer.this); if (sb != null) { - sb.append(threadName).append("RemoteService(").append(y.getType()).append(':').append(y.getName()).append(") loaded").append(LINE_SEPARATOR); + sb.append(threadName).append("RemoteService(").append(y.getType()).append(':').append(y.getName()).append(") injected").append(LINE_SEPARATOR); } }); //----------------- init ----------------- diff --git a/src/org/redkale/net/http/WebSocketNode.java b/src/org/redkale/net/http/WebSocketNode.java index 70253a90a..da61f891a 100644 --- a/src/org/redkale/net/http/WebSocketNode.java +++ b/src/org/redkale/net/http/WebSocketNode.java @@ -54,6 +54,7 @@ public abstract class WebSocketNode { }); }); } + protected abstract List getOnlineRemoteAddresses(@DynTargetAddress InetSocketAddress targetAddress, Serializable groupid); protected abstract int sendMessage(@DynTargetAddress InetSocketAddress targetAddress, Serializable groupid, boolean recent, Serializable message, boolean last); diff --git a/src/org/redkale/service/WebSocketNodeService.java b/src/org/redkale/service/WebSocketNodeService.java index bbb340db2..5f582c16b 100644 --- a/src/org/redkale/service/WebSocketNodeService.java +++ b/src/org/redkale/service/WebSocketNodeService.java @@ -32,7 +32,7 @@ public class WebSocketNodeService extends WebSocketNode implements Service { @Override public List getOnlineRemoteAddresses(@DynTargetAddress InetSocketAddress targetAddress, Serializable groupid) { - if (localSncpAddress != null && !localSncpAddress.equals(targetAddress)) return null; + if (localSncpAddress == null || !localSncpAddress.equals(targetAddress)) return ((WebSocketNodeService) remoteNode).getOnlineRemoteAddresses(targetAddress, groupid); final Set engineids = localNodes.get(groupid); if (engineids == null || engineids.isEmpty()) return null; final List rs = new ArrayList<>();