Node Js 使用Protobuf

来源:互联网 发布:淘宝网店可以改名吗 编辑:程序博客网 时间:2024/06/06 19:50

1,先去Nodjs下载 下载一个安装文件


2,安装完毕后呢, 就利用命令:

npm install protobufjs

进行安装


查看node js版本:

node -v

3,用IDE 打开,我使用webstom



4, 创建 协议文件:awesome.proto, 内容为:

package awesomepackage;syntax = "proto3";message AwesomeMessage {    string awesome_field = 1; // becomes awesomeField ,特别要注意, 这里下划线后面在初始化的时候, 修改为大写,这里是个大坑. 只有string 类型才这样。}

关键字:syntax


下面介绍下proto3的一些细节变化

Proto3的语法变化

语法标记

这个版本的protoc的protobuf编译器已经可以支持proto2语法和proto3的语法

如果你的proto文件没有添加syntax说明的话, 用这个版本的编译器会报错, 提示你默认proto2支持, 请添加语法标记

syntax = "proto2";

optional不需要了

只保留repeated标记数组类型, optional和required都被去掉了

实际使用证明, required的设计确实是蛋疼, C++的调试版会弹出assert,release版和optional也没啥区别

5,创建一个server.js 文件,代码为:

//  Test1.encode = function encode(message, writer) {//  if (!writer)//  writer = $Writer.create();//  if (message.field1 !== undefined && message.hasOwnProperty("field1"))//  writer.uint32(/* id 1, wireType 2 =*/10).string(message.field1);// if (message.field2 !== undefined && message.hasOwnProperty("field2"))//     writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.field2);// if (message.field3 !== undefined && message.hasOwnProperty("field3"))//     writer.uint32(/* id 3, wireType 0 =*/24).bool(message.field3);// return writer;// };



ProtoBuf = require("./protobufjs")ProtoBuf.load("./awesome.proto", function(err, root) {    if (err) throw err;    // Obtain a message type    var AwesomeMessage = root.lookup("awesomepackage.AwesomeMessage");    // Create a new message    var dataTable= {        awesome_field:"AwesomeStringteTYRFG Create By Pjgan 2017 02 14"    }    var message = AwesomeMessage.create(dataTable);    console.log(message.awesome_field) //取值    // Encode a message to an Uint8Array (browser) or Buffer (node)    var buffer = AwesomeMessage.encode(message).finish();    // ... do something with buffer    // Or, encode a plain object    var buffer = AwesomeMessage.encode({ awesomeField: "AwesomeString" }).finish();    // ... do something with buffer    // Decode an Uint8Array (browser) or Buffer (node) to a message    var message = AwesomeMessage.decode(buffer);    // ... do something with message});

6, 创建的文件放在node_modules 根目录即可。


7,创建完毕, 太多坑了。

0 0
原创粉丝点击