Closed iohao closed 4 months ago
已经预先生成的代理类有
该优化默认开启,开发者可以不需要使用与配置跟 jprotobuf-precompile-plugin 插件相关的了。
已经预先生成的代理类有
- 游戏对外服统一协议 ExternalMessage (yuque.com)
- 所有开发者定义的 action 的方法参数及返回值
- 解决协议碎片 (yuque.com),如 int、int list、String、String list、long、long list、ByteValueList 等
关于,这个新增的ProtobufActionParserListener,我在我的逻辑服与对外服启动时,在collect方法,与onActionCommand方法打断点。发现都都未进断点。
不知是否是这个地方引起的:
BarSkeletonBuilder-->类的成员变量一开始赋值了。
/** action 构建时的钩子方法 */
ActionParserListeners actionParserListeners = new ActionParserListeners();
但是build的时候 :
this.actionParserListeners = null;
游戏逻辑服启动时会进入 ProtobufActionParserListener onActionCommand
方法。
ProtobufActionParserListener
我这边测试下来,并没有进。
可以提供一个可复现的 demo 和复现步骤吗。
没有。就是普通示例逻辑服,然后打断点,发现没有没有进来。
另外我发现ProtoKit:
public byte[] toBytes(Object data) {
if (Objects.isNull(data)) {
return CommonConst.emptyBytes;
}
Class clazz = data.getClass();
Codec<Object> codec = ProtobufProxy.create(clazz);
try {
return codec.encode(data);
} catch (Throwable e) {
log.error(e.getMessage(), e);
}
return CommonConst.emptyBytes;
}
这里是不是始终会: ProtobufProxy.create(clazz);
这里是不是始终会: ProtobufProxy.create(clazz);
这有啥问题。
在此之前,在没做其他设置的情况下,首次访问 action 时,如果参数使用的 jprotobuf 协议类,那么在解码该参数时,会通过 ProtobufProxy.create 来创建对应的代理类(类似 .proto 相关的 编码、解码)。之后再访问时,才会从缓存中取到对应的代理类。
我想这段话:从缓存中取到对应的代理类。但是这里不是,还是每次都会去create吗?
在此之前,在没做其他设置的情况下,首次访问 action 时,如果参数使用的 jprotobuf 协议类,那么在解码该参数时,会通过 ProtobufProxy.create 来创建对应的代理类(类似 .proto 相关的 编码、解码)。之后再访问时,才会从缓存中取到对应的代理类。
我想这段话:从缓存中取到对应的代理类。但是这里不是,还是每次都会去create吗?
里面做了缓存,可以看下源码。
在启动时,预先生成好 jprotobuf 协议类对应的代理类(用于 .proto 相关的 编码、解码),而不必等到用时在创建该代理类。从而达到整体优化提速的效果。
在此之前,在没做其他设置的情况下,首次访问 action 时,如果参数使用的 jprotobuf 协议类,那么在解码该参数时,会通过
ProtobufProxy.create
来创建对应的代理类(类似 .proto 相关的 编码、解码)。之后再访问时,才会从缓存中取到对应的代理类。该特性使用 #272 实现,并内置到框架中,且默认生效。