Node Js 使用Protobuf

134 篇文章 1 订阅
53 篇文章 1 订阅

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值