项目场景:
在做一个参数外置的web工程,因为参数多达上千个,所以必须用一种较好的方式管理起来。最开始用xml或json也是可以满足,但是一旦有参数更新对齐就会变得比较麻烦。所以采用flatbuffer来校验参数个数和参数的类型。
例如:项目场景:
— 前端与后台运行同步参数更新
问题描述
提示:这里描述项目中遇到的问题:
例如:程序内部新增了多个参数,工程更新内部运行代码后需要同步到前端 ,这个字段新增,且类型为枚举或数组。也有可能出现web漏传。
解决方案:
我们以flatbuffer中的scheme文件作为标准,以此来约束参数的版本。前端通过json保存传递数据。
转为bin文件后,给到内部执行程序,bin传输快,且由flatbuffer转的bin必须要有flatbuffer文件才能解析,更好的保密。
示例如下。
fbs文件test.fbs
```c
```clike
> namespace Fltest;
>
> table Car{
> id:int;
> number:long;
> describle:string; } table Person{
> id:int;
> name:string;
> code:long;
> isVip:bool;
> carList:[Car]; } table RootType{
> items:[Person];
> stateid:int;
> time:long;
>
> }
>
> root_type RootType;
相对应json文件如下
{
"items": [{
"id": 1001,
"name": "张三",
"code": 1222,
"carList": [{
"id": 10001,
"number": 123456321,
"describle": "这是张三第一辆车"
}]
}, {
"id": 1002,
"name": "李四",
"code": 1123,
"carList": [{
"id": 10001,
"number": 123456001,
"describle": "这是李四第一辆车"
}, {
"id": 10002,
"number": 123456002,
"describle": "这是李四第二辆车"
}, {
"id": 10003,
"number": 123456003,
"describle": "这是李四第三辆车"
}]
}],
"stateid":404,
"time":20161127
}
然后执行命令flatc -b test.fbs test.json 匹配成功的话就会自动生成test.bin文件 啦。
如果不成功会报如下类似错误。可以试试在json里面写一个不存在的字段,就会转bin失败。
flatbuffer Bin文件的读取 python示例
第一步,需要用fbs生成python代码,flatc -p test.fbs
第二步,将python代码和flatbuffer中的python部分(下载flatbuffer代码里面有)都放到项目中
第三步,编写代码,如下所示
import RootType
import Car,Person
buf = open('D:/test.bin', 'rb').read()
buf = bytearray(buf)
monster = RootType.RootType.GetRootAsRootType(buf, 0)
# RootType.
print(monster)
print(monster.Time())
就会输出json中的time了