From 7e2c507d6185303b8adb806aa3a2b891740e410a Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 10 Sep 2023 15:33:10 +0800 Subject: [PATCH] ref[net]: no argument sync ask is executed in same thread pool executor --- .../main/java/com/zfoo/net/router/Router.java | 22 ++++++++++++++----- .../router/attachment/SignalAttachment.java | 7 +++--- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/router/Router.java b/net/src/main/java/com/zfoo/net/router/Router.java index 45d817b8..97a58a8b 100644 --- a/net/src/main/java/com/zfoo/net/router/Router.java +++ b/net/src/main/java/com/zfoo/net/router/Router.java @@ -90,10 +90,12 @@ public class Router implements IRouter { if (signalAttachment.getClient() == SignalAttachment.SIGNAL_OUTSIDE_CLIENT) { // 服务器收到外部客户端的SIGNAL_OUTSIDE_CLIENT,不做任何处理 TaskBus.dispatchBySession(task); - } else if (signalAttachment.getClient() == SignalAttachment.SIGNAL_NATIVE_CLIENT) { - // 服务器收到signalAttachment,不做任何处理 + } else if (signalAttachment.getClient() == SignalAttachment.SIGNAL_NATIVE_ARGUMENT_CLIENT) { signalAttachment.setClient(SignalAttachment.SIGNAL_SERVER); TaskBus.dispatchByTaskExecutorHash(signalAttachment.getTaskExecutorHash(), task); + } else if (signalAttachment.getClient() == SignalAttachment.SIGNAL_NATIVE_NO_ARGUMENT_CLIENT) { + signalAttachment.setClient(SignalAttachment.SIGNAL_SERVER); + TaskBus.dispatchBySession(task); } else { // 客户端收到服务器应答,客户端发送的时候client为SIGNAL_NATIVE_CLIENT,服务器收到的时候将其设置为SIGNAL_SERVER var removedAttachment = (SignalAttachment) SignalBridge.removeSignalAttachment(signalAttachment); @@ -183,8 +185,12 @@ public class Router implements IRouter { @Override public SyncAnswer syncAsk(Session session, Object packet, @Nullable Class answerClass, @Nullable Object argument) throws Exception { var clientSignalAttachment = new SignalAttachment(); - var taskExecutorHash = TaskBus.calTaskExecutorHash(argument); - clientSignalAttachment.setTaskExecutorHash(taskExecutorHash); + if (argument == null) { + clientSignalAttachment.setClient(SignalAttachment.SIGNAL_NATIVE_NO_ARGUMENT_CLIENT); + } else { + clientSignalAttachment.setClient(SignalAttachment.SIGNAL_NATIVE_ARGUMENT_CLIENT); + clientSignalAttachment.setTaskExecutorHash(TaskBus.calTaskExecutorHash(argument)); + } try { SignalBridge.addSignalAttachment(clientSignalAttachment); @@ -220,9 +226,13 @@ public class Router implements IRouter { @Override public AsyncAnswer asyncAsk(Session session, Object packet, @Nullable Class answerClass, @Nullable Object argument) { var clientSignalAttachment = new SignalAttachment(); - var taskExecutorHash = TaskBus.calTaskExecutorHash(argument); - clientSignalAttachment.setTaskExecutorHash(taskExecutorHash); + if (argument == null) { + clientSignalAttachment.setClient(SignalAttachment.SIGNAL_NATIVE_NO_ARGUMENT_CLIENT); + } else { + clientSignalAttachment.setClient(SignalAttachment.SIGNAL_NATIVE_ARGUMENT_CLIENT); + clientSignalAttachment.setTaskExecutorHash(TaskBus.calTaskExecutorHash(argument)); + } // 服务器在同步或异步的消息处理中,又调用了同步或异步的方法,这时候threadReceiverAttachment不为空 var serverSignalAttachment = serverReceiverAttachmentThreadLocal.get(); diff --git a/net/src/main/java/com/zfoo/net/router/attachment/SignalAttachment.java b/net/src/main/java/com/zfoo/net/router/attachment/SignalAttachment.java index 4692f96d..b379fb85 100644 --- a/net/src/main/java/com/zfoo/net/router/attachment/SignalAttachment.java +++ b/net/src/main/java/com/zfoo/net/router/attachment/SignalAttachment.java @@ -37,8 +37,9 @@ public class SignalAttachment { * 0 for the server, 1 for the sync or async native client, 2 for the outside client such as browser, mobile */ public static final byte SIGNAL_SERVER = 0; - public static final byte SIGNAL_NATIVE_CLIENT = 1; - public static final byte SIGNAL_OUTSIDE_CLIENT = 2; + public static final byte SIGNAL_NATIVE_ARGUMENT_CLIENT = 1; + public static final byte SIGNAL_NATIVE_NO_ARGUMENT_CLIENT = 2; + public static final byte SIGNAL_OUTSIDE_CLIENT = 12; /** * EN:Unique identification of a packet, unique representation of an attachment, hashcode() and equals() equals signalId value @@ -55,7 +56,7 @@ public class SignalAttachment { /** * 0 for the server, 1 for the sync or async native client, 2 for the outside client such as browser, mobile */ - private byte client = SIGNAL_NATIVE_CLIENT; + private byte client = SIGNAL_NATIVE_ARGUMENT_CLIENT; /** * The timestamp the client sent it