ioGame 21.7,java 高性能游戏服务器框架;netty 高性能游戏服务器框架
21.7
文档与日志
版本更新汇总
- [core] #112 protobuf 协议类添加检测,通过 action 构建时的监听器实现
- [core] #272 业务框架 - 提供 action 构建时的监听回调
- [core] #274 优化、提速 - 预生成 jprotobuf 协议类的代理,通过 action 构建时的监听器实现
- [broker] fix #277 、#280 偶现 BrokerClientType 为空
- [external] #271 游戏对外服 - 内置与可选 handler - log 相关的打印(触发异常、断开连接时)
- [room] 简化命名: AbstractPlayer --> Player、AbstractRoom --> Room
- 其他优化:预先生成游戏对外服统一协议的代理类及内置的协议碎片 (yuque.com)相关代理类,优化 action 参数解析
[external]
#271 游戏对外服 - 内置与可选 handler - log 相关的打印(触发异常、断开连接时)
[core]
#272 业务框架 - 提供 action 构建时的监听回调
开发者可以利用 ActionParserListener 接口来观察 action 构建过程,或者做一些额外的扩展。
扩展示例参考
// 简单打印
public final class YourActionParserListener implements ActionParserListener {
@Override
public void onActionCommand(ActionParserContext context) {
ActionCommand actionCommand = context.getActionCommand();
log.info(actionCommand);
}
}
void test() {
BarSkeletonBuilder builder = ...;
builder.addActionParserListener(new YourActionParserListener());
}
#112 protobuf 协议类添加检测,通过 action 构建时的监听器实现
如果当前使用的编解码器为 ProtoDataCodec 时,当 action 的参数或返回值的类没有添加 ProtobufClass 注解时(通常是忘记添加),给予一些警告提示。
// 该协议类没有添加 ProtobufClass 注解
class Bird {
public String name;
}
@ActionController(1)
public class MyAction {
@ActionMethod(1)
public Bird testObject() {
return new Bird();
}
}
警告打印参考
======== 注意,协议类没有添加 ProtobufClass 注解 ========
class com.iohao.game.action.skeleton.core.action.Bird
#274 优化、提速 - 预生成 jprotobuf 协议类的代理,通过 action 构建时的监听器实现
如果当前使用的编解码器为 ProtoDataCodec 时,会在启动时就预先生成好 jprotobuf 协议类对应的代理类(用于 .proto 相关的 编码、解码),而不必等到用时在创建该代理类。从而达到整体优化提速的效果。
在此之前,在没做其他设置的情况下,首次访问 action 时,如果参数使用的 jprotobuf 协议类,那么在解码该参数时,会通过
ProtobufProxy.create
来创建对应的代理类(类似 .proto 相关的 编码、解码)。之后再访问时,才会从缓存中取到对应的代理类。该优化默认开启,开发者可以不需要使用与配置跟 jprotobuf-precompile-plugin 插件相关的了。
已经预先生成的代理类有
- 游戏对外服统一协议 ExternalMessage (yuque.com)
- 所有开发者定义的 action 的方法参数及返回值
- 解决协议碎片 (yuque.com)相关,如 int、int list、String、String list、long、long list、ByteValueList ...等
[room]
简化命名: AbstractPlayer --> Player、AbstractRoom --> Room
其他优化
优化 action 参数解析