在 as3 中使用 protobuf
在最近参与开发的 adobe air 项目中,前后端的通信协议从 XML、JSON 再到 protobuf,最后选择 protobuf 原因,主要是前后端维护 protobuf 协议就行了,同时还可以利用 IDE 做一些编译检查。
目前我能找到的 protobuf as3 开源库,都存在一些问题:不支持嵌套类,生成代码无法编译 等等。于是花了一点时间,参考 google protobuf 相关说明,编写 protobuf-as3 以及 protoc-as3,用于支持运行时及代码生成 Github。
protobuf-as3 库只支持 proto3 格式,proto3 列出的数据类型基本都支持。
1. Proto 定义
以下 proto 文件将生成 5个 as3 类:Token.as、Token$Type.as、TokenBindingResponseCode.as、TokenBindingRequest.as、TokenBindingResponse.as。我们以 $ 作为分隔符以实现 protobuf 类的嵌套。
syntax = "proto3"; |
2. 代码使用
var token:Token = new Token(); |
protobuf 数据不包含任何的元数据,所以对于一段数据而言,你是不能够区别这段数据是属于哪一条协议的,因此对于前后端的交互,可以引入 12 字节的头部(length、session、type)。