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
- Node Js 使用Protobuf
- Node.js使用google-protobuf
- 在node中使用protobuf.js
- ProtoBuf.js 使用技巧
- ProtoBuf.js 使用技巧
- netty与protobuf与node.js
- cocos creator中使用protobuf(dcodeIO/protobuf.js 5.0)
- Node.js - Node.js安装使用入门
- node js 安装使用
- 为什么使用Node.JS
- 开始使用node.js
- node.js使用mongodb
- node.js 使用 imagemagick
- Node.js使用cnpm
- Node.js使用cnpm
- node.js安装、使用
- node.js forever使用
- Node.js简单使用
- SpringBoot15 之 Servlet
- 算法训练 传纸条 蓝桥杯
- 1062. Talent and Virtue
- Java 数据结构 --> Stack 类
- LeetCode 88. Merge Sorted Array
- Node Js 使用Protobuf
- 面试微软等公司必备的书
- eclipse下运行自定义maven命令
- 行测-言语类题目总结
- SpringBoot16 之 Listener and Filter
- JNI开发流程(androidstudio)
- elasticsearch-倒排索引原理
- 通过Android 源码分析ScrollView ‘ScrollView can host only one direct child’错误问题
- Mac 上安装 mariadb