protobuf 前端怎么使用

来源:互联网 发布:数据下载 编辑:程序博客网 时间:2024/06/02 21:26

为什么要学protobuf  

  1、体体小 是json的1/8

  2、编码解码速度快

  3、"跨语言":我们只需要写一份xxx.proto,即可以用工具生成java、python、c++等语言对应的代码


 首先我们定义一份huibao.proto文件


 

syntax = "proto3";option java_package = "com.bubukj.proto";  //设置java对应的packageoption java_multiple_files = true;                           //建议设置为true,这样会每个对象放在一个文件中,否则所有对象都在一个java文件中message huibaoData  {     message userData {      int64 id = 1; string userName = 2; string userAge = 3; }  message indexData {      int64 id = 1; string sj = 2;     repeated dbUtil db = 3; }  message dbUtil {   int64 id = 1;   string haha = 2; }}

用工具把proto源文件变成我们需要的代码

  1. 下载并安装工具

    谷歌提供的工具protoc.exe,可以把proto源文件生成java、c++、python等语言所对应的代码,这个工具在https://github.com/google/protobufo中可以找到,我也分享到百度云了protoc.exe
  2. 执行命令生成代码 
               这里有我用到的一个脚本文件分享给大家脚本文件
rd .\src\ /s/qmd .\src\cmd .\src\javamd .\src\pythonmd .\src\jsmd .\src\commonjsprotoc.exe --cpp_out=.\src\c huibao.protoprotoc.exe --java_out=.\src\java huibao.protoprotoc.exe --python_out=.\src\python huibao.protorem protoc.exe --js_out=.\src\js huibao.protoprotoc.exe --js_out=library=huibao_proto,binary:.\src\js huibao.protoprotoc.exe --js_out=import_style=commonjs,binary:.\src\commonjs huibao.protopause

运行这个脚本文件就可以生成huibao_proto.js

接下来该怎么用这个Js 只需要引入google的js库就可以直接用了  

例子如下:
 以npm 讲解  :

      安装好npm以后,安装需要的库:(假设已安装好npm)

  执行如下命令:
  npm install -g require(对库文件的引用库)
  npm install -g browserify(这个是用来打包成前端使用的js文件)
  最后我们执行   (执行这句命令的时候必须在browserify目录下 不然会报找不到package.json文件 )
   npm install google-protobuf 会在当前目录下生成一个文件夹,里面装的就是protobuf的库文件。

   
       
都装还以后,只需要再写一个导出文件用browserify执行打包即可
var myProto = require('./huibao_proto');        module.exports = {          DataProto: myProto      }  
保存为exports.js。

对文件进行编译打包
执行命令 
browserify exports.js > huibao.js
然后会生成一个huibao.js文件。
这时候就可以使用huibao.js了 



新建一个项目:


html 代码如下:
<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><script type="text/javascript" src="google-protobuf/google-protobuf.js"></script><script type="text/javascript" src="huibao.js"></script><script type="text/javascript">var huibao = new proto.huibaoData();var user = new proto.huibaoData.userData();console.log(user);user.setId(2);console.log(user.getId());</script></head><body></body></html>

打开html  报如下错误:

在google-protobuf.js 中找到exports

exports.Map=jspb.Map;exports.Message=jspb.Message;exports.BinaryReader=jspb.BinaryReader;exports.BinaryWriter=jspb.BinaryWriter;exports.ExtensionFieldInfo=jspb.ExtensionFieldInfo;exports.ExtensionFieldBinaryInfo=jspb.ExtensionFieldBinaryInfo;exports.exportSymbol=goog.exportSymbol;exports.inherits=goog.inherits;exports.object={extend:goog.object.extend};exports.typeOf=goog.typeOf;
看得出这句代码 其实就是就是google-protobuf.js想对外提供的个变量 只不过没有定义  好办 直接 在前面加一个var exports = {}; 

然后再刷新html


至此 我们可以再好好去研究研究 怎么玩protobuf 

重构我们的前端代码 做到真正的数据分离 以数据驱动页面

原创粉丝点击