java websocket 游戏服务器框架 ioGame 17.1.25 多协议支持 protobuf、json
v17.1.25 news
ActionCommandInfoBuilder 改名为 ActionCommandParser 命令解析器
将业务框架中的部分类设置为 final 权限
废弃动态属性 FlowAttr.data ,由 FlowAttr.actionBizParam 代替
#I63L7V BarSkeletonBuilderParamConfig 类的方法名变更
addActionController 标记为废弃,请使用 scanActionPackage。
addActionSend 标记为废弃,请使用 scanActionSendPackage。
因为 addActionController 、addActionSend 的方法名,会给部分开发者带来混淆。这导致部分开发者在使用时 addActionController 方法时,会多次添加 action 类。实际上只需要随意配置一个 action 类就可以了,即使有一万个action。
#I63L89 标准 action 规则
- 业务方法上添加注解 ActionMethod
- 业务方法的访问权限必须是:public
- 业务方法不能是:static
- 业务方法需要是在 action 类中声明的方法
简单的说,标准的 action 是非静态的,且访问权限为 public 的方法。
术语说明:在 action 类中提供的业务方法通常称为 action
#I6307A 支持多种协议:protobuf、json,并支持可扩展
现在 ioGame 支持同样的一套业务代码,无需开发者做代码的变更,就能支持多种协议的切换,如:protobuf、json。协议的切换是简单的,只需要一行代码。
简单点说,如果开发者的项目之前使用的是 json 数据来传输的,以后想改用 protobuf 来传输,是不需要改变业务方法的。框架除了内置支持的 protobuf、json 协议外,开发者还可以对协议进行扩展。
让我们先看一个 action 的业务代码片段。
@ProtobufClass
@FieldDefaults(level = AccessLevel.PUBLIC)
public class HelloReq {
String name;
}
@ActionController(19)
public class JsonAction {
@ActionMethod(1)
public HelloReq hello(HelloReq helloReq) {
helloReq.name = helloReq.name + ",hello json";
return helloReq;
}
}
似乎与之前介绍的并没有什么区别,至少在编写代码方式上没什么区别。在不变更代码的情况下,就能支持 json 数据协议了。
在 ioGame 中切换协议是简单的,只需要一行代码。ioGame 默认的 json 编解码器使用的是 fastjson2 来解析 json 数据,如果开发者想使用其他 json 库来做数据解析,可以通过扩展的方式,并且扩展是简单的、容易的。
public class JsonApplication {
public static void main(String[] args) {
// 设置 json 编解码。如果不做设置,默认使用 jprotobuf
IoGameGlobalSetting.me().setDataCodec(new JsonDataCodec());
// 游戏对外服端口
int port = 10100;
// 逻辑服
var demoLogicServer = new JsonLogicServer();
// 启动 对外服、网关服、逻辑服; 并生成游戏业务文档
SimpleHelper.run(port, List.of(demoLogicServer));
}
}