接口 InvokeModuleContext
- 所有已知子接口:
CommunicationAggregationContext
- 所有已知实现类:
BrokerClientItem
public interface InvokeModuleContext
内部模块通讯上下文,内部模块指的是游戏逻辑服
单个逻辑服与单个逻辑服通信请求-有响应值(可跨进程) 单个逻辑服与单个逻辑服通信请求-无响应值(可跨进程) 单个逻辑服与同类型多个逻辑服通信请求(可跨进程)获取内部模块通讯上下文
// 游戏逻辑服通讯上下文
InvokeModuleContext invokeModuleContext = BrokerClientHelper.getInvokeModuleContext();
参考文档 异步小技巧
默认情况下,跨服且有返回值的 action 调用,则都是同步的; 如果想要使用异步的方式,可以通过 CompletableFuture 或虚拟线程来实现。
example async : 通过 CompletableFuture 实现;
CompletableFuture<YourMsg> future = CompletableFuture.supplyAsync(() -> {
// 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
CmdInfo cmdInfo = ...
// 游戏逻辑服通讯上下文
InvokeModuleContext invokeModuleContext = ...
// 根据路由信息来请求其他子服务器(其他逻辑服)的数据
return invokeModuleContext.invokeModuleMessageData(cmdInfo, YourMsg.class);
});
... 你的其他逻辑
var msg = future.get();
log.info("message : {} ", msg);
example async : 通过 CompletableFuture 实现的回调写法;
CompletableFuture<YourMsg> future = CompletableFuture.supplyAsync(() -> {
// 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方)
CmdInfo cmdInfo = ...
// 游戏逻辑服通讯上下文
InvokeModuleContext invokeModuleContext = ...
// 根据路由信息来请求其他子服务器(其他逻辑服)的数据
return invokeModuleContext.invokeModuleMessageData(cmdInfo, YourMsg.class);
}).thenAccept(msg -> {
// 回调写法
log.info("message : {}", msg);
});
- 作者:
- 渔民小镇
- 日期:
- 2022-06-07
-
方法概要
修饰符和类型方法说明default ResponseCollectMessage
invokeModuleCollectMessage
(CmdInfo cmdInfo) 模块之间的访问,访问【同类型】的多个逻辑服default ResponseCollectMessage
invokeModuleCollectMessage
(CmdInfo cmdInfo, Object data) 模块之间的访问,访问【同类型】的多个逻辑服invokeModuleCollectMessage
(RequestMessage requestMessage) 模块之间的访问,访问【同类型】的多个逻辑服default ResponseMessage
invokeModuleMessage
(CmdInfo cmdInfo) 根据路由信息来请求其他子服务器(其他逻辑服)的数据default ResponseMessage
invokeModuleMessage
(CmdInfo cmdInfo, Object data) 根据路由信息来请求其他子服务器(其他逻辑服)的数据invokeModuleMessage
(RequestMessage requestMessage) 根据路由信息来请求其他子服务器(其他逻辑服)的数据default <T> T
invokeModuleMessageData
(CmdInfo cmdInfo, Class<T> clazz) 根据路由信息来请求其他子服务器(其他逻辑服)的数据default <T> T
invokeModuleMessageData
(CmdInfo cmdInfo, Object data, Class<T> clazz) 根据路由信息来请求其他子服务器(其他逻辑服)的数据default <T> T
invokeModuleMessageData
(RequestMessage requestMessage, Class<T> clazz) 根据 RequestMessage 来请求其他子服务器(其他逻辑服)的数据default void
invokeModuleVoidMessage
(CmdInfo cmdInfo) 根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值default void
invokeModuleVoidMessage
(CmdInfo cmdInfo, Object data) 根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值void
invokeModuleVoidMessage
(RequestMessage requestMessage) 根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值
-
方法详细资料
-
invokeModuleVoidMessage
根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值异步无阻塞的方法,因为没有返回值; 游戏逻辑服与单个游戏逻辑服通信请求 - 无返回值(可跨进程) 单个逻辑服与单个逻辑服通信请求 - 无返回值(可跨进程)
example// 内部模块通讯上下文,内部模块指的是游戏逻辑服 InvokeModuleContext invokeModuleContext = ... // 请求房间逻辑服来创建房间,并且不需要返回值 // 路由、业务参数 invokeModuleContext.invokeModuleVoidMessage(cmdInfo, data);
- 参数:
cmdInfo
- cmdInfodata
- 请求参数
-
invokeModuleVoidMessage
根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值异步无阻塞的方法,因为没有返回值; 游戏逻辑服与单个游戏逻辑服通信请求 - 无返回值(可跨进程) 单个逻辑服与单个逻辑服通信请求 - 无返回值(可跨进程)
example// 内部模块通讯上下文,内部模块指的是游戏逻辑服 InvokeModuleContext invokeModuleContext = ... // 请求房间逻辑服来创建房间,并且不需要返回值 // 路由、业务参数 invokeModuleContext.invokeModuleVoidMessage(cmdInfo);
- 参数:
cmdInfo
- cmdInfo
-
invokeModuleVoidMessage
根据路由信息来请求其他子服务器(其他逻辑服)的方法,并且不需要返回值异步无阻塞的方法,因为没有返回值; 游戏逻辑服与单个游戏逻辑服通信请求 - 无返回值(可跨进程) 单个逻辑服与单个逻辑服通信请求 - 无返回值(可跨进程)
example// 内部模块通讯上下文,内部模块指的是游戏逻辑服 InvokeModuleContext invokeModuleContext = ... // 请求房间逻辑服来创建房间,并且不需要返回值 // 路由、业务参数 invokeModuleContext.invokeModuleVoidMessage(requestMessage);
- 参数:
requestMessage
- requestMessage
-
invokeModuleMessageData
根据路由信息来请求其他子服务器(其他逻辑服)的数据相关文档 游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程) 游戏逻辑服之间的交互 异步小技巧
examplepublic void count() { // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... YourData data = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 YourMsg msg = invokeModuleContext.invokeModuleMessageData(cmdInfo, data, YourMsg.class); log.info("message : {} ", msg); }
- 类型参数:
T
- t- 参数:
cmdInfo
- 路由信息data
- 请求参数clazz
- response data class- 返回:
- pb 对象
-
invokeModuleMessageData
根据路由信息来请求其他子服务器(其他逻辑服)的数据相关文档 游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程) 游戏逻辑服之间的交互 异步小技巧
examplepublic void count() { // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 YourMsg msg = invokeModuleContext.invokeModuleMessageData(cmdInfo, YourMsg.class); log.info("message : {} ", msg); }
- 类型参数:
T
- t- 参数:
cmdInfo
- 路由信息clazz
- response data class- 返回:
- response data 解析后的数据
-
invokeModuleMessageData
根据 RequestMessage 来请求其他子服务器(其他逻辑服)的数据相关文档 游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程) 游戏逻辑服之间的交互 异步小技巧
examplepublic void count() { RequestMessage request = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 YourMsg msg = invokeModuleContext.invokeModuleMessageData(request, YourMsg.class); log.info("message : {} ", msg); }
- 类型参数:
T
- t- 参数:
requestMessage
- RequestMessageclazz
- response data class- 返回:
- response data 解析后的数据
-
invokeModuleMessage
根据路由信息来请求其他子服务器(其他逻辑服)的数据相关文档 游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程) 游戏逻辑服之间的交互 异步小技巧
examplepublic void count() { // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... YourData data = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 ResponseMessage responseMessage = invokeModuleContext.invokeModuleMessage(cmdInfo, data); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); }
- 参数:
cmdInfo
- cmdInfodata
- 请求参数- 返回:
- ResponseMessage
-
invokeModuleMessage
根据路由信息来请求其他子服务器(其他逻辑服)的数据相关文档 游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程) 游戏逻辑服之间的交互 异步小技巧
examplepublic void count() { // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 ResponseMessage responseMessage = invokeModuleContext.invokeModuleMessage(cmdInfo); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); }
- 参数:
cmdInfo
- cmdInfo- 返回:
- ResponseMessage
-
invokeModuleMessage
根据路由信息来请求其他子服务器(其他逻辑服)的数据相关文档 游戏逻辑服与单个游戏逻辑服通信请求 - 有返回值(可跨进程) 游戏逻辑服之间的交互 异步小技巧
examplepublic void count() { RequestMessage request = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他子服务器(其他逻辑服)的数据 ResponseMessage responseMessage = invokeModuleContext.invokeModuleMessage(request); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); }
- 参数:
requestMessage
- requestMessage- 返回:
- ResponseMessage
-
invokeModuleCollectMessage
模块之间的访问,访问【同类型】的多个逻辑服模块A 访问 模块B 的某个方法,因为只有模块B持有这些数据,这里的模块指的是逻辑服。 假设启动了多个模块B,分别是:模块B-1、模块B-2、模块B-3、模块B-4 等。框架支持访问【同类型】的多个逻辑服,并把多个相同逻辑服结果收集到一起。 具体的意思可以参考文档中的说明 游戏逻辑服与同类型多个游戏逻辑服通信请求(可跨进程) 请求同类型多个逻辑服通信结果 异步小技巧
examplepublic void count() { // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... YourData data = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他【同类型】的多个子服务器(其他逻辑服)数据 var responseCollectMessage = invokeModuleContext.invokeModuleCollectMessage(cmdInfo, data); // 每个逻辑服返回的数据集合 List<ResponseCollectItemMessage> messageList = responseCollectMessage.getMessageList(); for (ResponseCollectItemMessage responseCollectItemMessage : messageList) { ResponseMessage responseMessage = responseCollectItemMessage.getResponseMessage(); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); } }
- 参数:
cmdInfo
- 路由信息data
- 业务数据- 返回:
- ResponseCollectMessage
-
invokeModuleCollectMessage
模块之间的访问,访问【同类型】的多个逻辑服模块A 访问 模块B 的某个方法,因为只有模块B持有这些数据,这里的模块指的是逻辑服。 假设启动了多个模块B,分别是:模块B-1、模块B-2、模块B-3、模块B-4 等。框架支持访问【同类型】的多个逻辑服,并把多个相同逻辑服结果收集到一起。 具体的意思可以参考文档中的说明 游戏逻辑服与同类型多个游戏逻辑服通信请求(可跨进程) 请求同类型多个逻辑服通信结果 异步小技巧
examplepublic void count() { // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 路由:这个路由是将要访问逻辑服的路由(表示你将要去的地方) CmdInfo cmdInfo = ... // 根据路由信息来请求其他【同类型】的多个子服务器(其他逻辑服)数据 ResponseCollectMessage responseCollectMessage = invokeModuleContext.invokeModuleCollectMessage(cmdInfo); // 每个逻辑服返回的数据集合 List<ResponseCollectItemMessage> messageList = responseCollectMessage.getMessageList(); for (ResponseCollectItemMessage responseCollectItemMessage : messageList) { ResponseMessage responseMessage = responseCollectItemMessage.getResponseMessage(); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); } }
- 参数:
cmdInfo
- 路由信息- 返回:
- ResponseCollectMessage
-
invokeModuleCollectMessage
模块之间的访问,访问【同类型】的多个逻辑服模块A 访问 模块B 的某个方法,因为只有模块B持有这些数据,这里的模块指的是逻辑服。 假设启动了多个模块B,分别是:模块B-1、模块B-2、模块B-3、模块B-4 等。 框架支持访问【同类型】的多个逻辑服,并把多个相同逻辑服结果收集到一起。 具体的意思可以参考文档中的说明 游戏逻辑服与同类型多个游戏逻辑服通信请求(可跨进程) 请求同类型多个逻辑服通信结果 异步小技巧
examplepublic void count() { RequestMessage request = ... // 模块通讯上下文 InvokeModuleContext invokeModuleContext = ... // 根据路由信息来请求其他【同类型】的多个子服务器(其他逻辑服)数据 ResponseCollectMessage responseCollectMessage = invokeModuleContext.invokeModuleCollectMessage(request); // 每个逻辑服返回的数据集合 List<ResponseCollectItemMessage> messageList = responseCollectMessage.getMessageList(); for (ResponseCollectItemMessage responseCollectItemMessage : messageList) { ResponseMessage responseMessage = responseCollectItemMessage.getResponseMessage(); // 得到逻辑服返回的业务数据 YourMsg msg = responseMessage.getData(YourMsg.class); log.info("message : {} ", msg); } }
- 参数:
requestMessage
- requestMessage- 返回:
- ResponseAggregationMessage
-