当前位置:
首页
文章
前端
详情

protobufjs起步使用

一、介绍

API文档:https://www.npmjs.com/package/protobufjs

ProtoBuf.js是基于ByteBuffer.js的Protocol Buffers纯Javascript实现。主要功能是解析.proto 文件,构建message类,和简单的编码、解码。

二、优势

同为数据的存储格式,和json相比,Protocol Buffers的优点主要体现在性能和体积上,性能方面需要实际的测试,暂且不说,数据体积方面的优势是比较明显的,例如,一个json文件:

[
    {"Name": "zhangsan", "Gender": 0, "Age": 18},
    {"Name": "lisi", "Gender": 1, "Age": 19}
]

再看一个protobuf文件:

message Person {
    required string Name = 1;
    optional int32 Gender = 2;
    optional int32 Age = 3;
}

三、安装

npm安装地址:https://www.npmjs.com/package/protobufjs

npm install protobufjs [--save --save-prefix=~]

CDN方式:

<script type="text/javascript" src="./protobuf.js"></script>

四、使用

1、Load 加载(默认是相对路径引入.json文件)

var locProto,
protobuf.load(BASE_ASSET_ROOT_URL+'/test.json', function(err, root) {
    locProto = root.lookupType("Loc.flight");
    locProto.decode(`Uint8Array格式数据`); // 或 locProto.decode(new Uint8Array(buffer))
});

2、fromJSON加载

var jsonDescriptor = require("./test.json");
var root = protobuf.Root.fromJSON(jsonDescriptor);
var locProto = root.lookupType("Loc.flight");

3、通过命令行生成test.json

pbjs -t json test.proto &gt; test.json

五、修改protobuf.js里的fetch函数,使之可以域方式加载

搜索关键字

function fetch(filename, weak) { // ...

找到 fetch(self.resolvePath("", filename)); 添加如下判断

if(!/^http/.test(filename)) {
    if (util.isString(filename))
        filename = [ filename ];
    filename.forEach(function(filename) {
        fetch(self.resolvePath("", filename));
    });
} else {
    fetch(filename);
}

示例:

protobuf.load('http://www.xxx.com/vendor/flightloc.json', function(err, root) {
    locProto = root.lookupType("Loc.SubscribeFlightLoc");
});

参考链接

  • https://www.cnblogs.com/darrenhwang/p/7058853.html

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。