Node Js 使用Protobuf

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

你可能感兴趣的:(lua学习,cocos2dx学习)