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,创建完毕, 太多坑了。