Skip to content

java websocket 游戏服务器框架 ioGame 17.1.25 多协议支持 protobuf、json

Compare
Choose a tag to compare
@iohao iohao released this 03 Dec 06:36
· 513 commits to main since this release

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 规则

  1. 业务方法上添加注解 ActionMethod
  2. 业务方法的访问权限必须是:public
  3. 业务方法不能是:static
  4. 业务方法需要是在 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));
    }
}