前言

今天给大家介绍一位公众号的贵客:

姓名:Javen

Email:javendev@126.com

Github:https://github.com/Javen205

Gitee:https://gitee.com/Javen205

CSDN:https://blog.csdn.net/zywjava

特长:擅长聚合支付、QQ玩一玩

开源项目:IJPay、weixinguide作者

Javen今天带来的是google-protobuf在前后端的应用,为了降低大家的阅读负担,公众号只节选了其中基础部分以及在Cocos Creator的使用。大家可以通过阅读原文更多地了解到google-protobuf在Java、QQ玩一玩等平台上的使用。

1. 什么是protobuf

protobuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protobuf更小更快更简单。你可以用定义自己protobuf的数据结构,用ProtoBuf编译器生成特定语言的源代码,如C++,Java,Python等,目前protobuf对主流的编程语言都提供了支持,非常方便的进行序列化和反序列化。

特点:

  • 平台无关、语言无关。

  • 二进制、数据自描述。

  • 提供了完整详细的操作API。

  • 高性能 比xml要快20-100倍

  • 尺寸小 比xml要小3-10倍 高可扩展性

  • 数据自描述、前后兼容

下载protobuf的编译器

目前最新版本为Protocol Buffers v3.6.1

2. 配置环境变量

解压 protoc-3.6.1-osx-x86_64.zip

Mac 配置环境变量 vi ~/.bash_profile 使其配置生效 source ~/.bash_profile

#protobuf
export PROTOBUF_HOME=/Users/Javen/Documents/dev/java/protobuf/protoc-3.6.1-osx-x86_64
export PATH=$PATH:$PROTOBUF_HOME/bin

Window 将bin添加到path 即可 例如: D:\protobuf\protoc-3.6.1-win32\bin

本文在Mac环境下编写  Macwindow命令唯一的区别就是需要将 protoc改成 protoc.exe 前提是需要添加环境变量。

3. 编写一个proto文件

文件保存为 chat.protoproto文件摘自t-io 让天下没有难开发的网络编程

syntax = "proto3";
package com.im.common.packets;//设置java对应的packageoption java_package = "com.im.common.packets";
option java_multiple_files = true; /** * 聊天类型  */
enum ChatType { CHAT_TYPE_UNKNOW = 0;//未知  CHAT_TYPE_PUBLIC = 1;//公聊  CHAT_TYPE_PRIVATE = 2;//私聊
}
/** * 聊天请求  */
message ChatReqBody {   int64 time = 1;//消息发送时间    ChatType type = 2; //聊天类型  string text = 3; //聊天内容    string group = 4; //目标组id  int32 toId = 5; //目标用户id,   string toNick = 6; //目标用户nick
}   /** * 聊天响应  */
message ChatRespBody {  int64 time = 1;//消息发送时间    ChatType type = 2; //聊天类型  string text = 3; //聊天内容    int32 fromId = 4; //发送聊天消息的用户id    string fromNick = 5; //发送聊天消息的用户nick   int32 toId = 6; //目标用户id   string toNick = 7; //目标用户nick  string group = 8; //目标组id
}

4. 编译器proto为js

protoc --js_out=import_style=commonjs,binary:. chat.proto

执行后会在当前文件夹中生成 chat_pb.js 文件,这里面就是 protobuf的API和一些函数。如果是 Node.js 就可以直接使用了,如果想在浏览器(前端)中使用 protobuf还需要做一些处理。

chat_pb.js文件的同级目录下安装引用库

npm install -g require
npm install google-protobuf
npm install -g browserify

编写脚本保存为exports.js,使用browserify对文件进行编译打包

var chatProto = require('./chat_pb');
module.exports = {     DataProto: chatProto
}

执行命令

browserify exports.js > chat.js

chat_pb.js文件进行编译打包生成 chat.js后就可以在Cocos Creator愉快的使用了。

5. 使用示例

将生成的chat.js导入项目,Cocos Creator会提示是否设置为插件,在这里选择是。

cc.Class({   extends: cc.Component,  buttonClick() { var chatReqBody = new proto.com.im.common.packets.ChatReqBody();   chatReqBody.setTime(new Date().getTime());  chatReqBody.setText("测试");    chatReqBody.setType(1); chatReqBody.setGroup("Javen");    chatReqBody.setToid(666);   chatReqBody.setTonick("Javen205");    var bytes = chatReqBody.serializeBinary();     console.log("序列化为字节:"+bytes);    var data = proto.com.im.common.packets.ChatReqBody.deserializeBinary(bytes);   console.log("反序列化为对象:"+data);    console.log("从对象中获取指定属性:"+data.getTonick()); console.log("对象转化为JSON:"+JSON.stringify(data));  }
});

Cocos Creator的插件脚本会将导出的对象设置为全局变量,因此在使用时无需要require任何js文件,proto对象直接可以使用啦!

demo源码链接: https://pan.baidu.com/s/1hy12FdO1tNL7pV8kNPXpUw 密码:huil

6. 后记

google-protobuf是Cocos Creator中使用protobuf另一个解决方案。它与之前Shawn提供的protobufjs有所不同,使用google-protobuf是使用protoc命令将proto文件编译为js,做为Cocos Creator的插件。这下不喜欢将proto文件暴露在安装包里的同学有福了,看来pbkiller替代品了,要加油了哦!


如果觉得公众号上的文章对您或您身边的朋友有帮助,请分享给他们,愿我们一起成长!

与Google Protocol Buffer亲密接触相关推荐

  1. windows下Google Protocol Buffer 编译安装(vs)教程

    蒲公英的博客 分享技术带来的快乐 Kuaile.IN 搜索 首页 安卓相关 WordPress 主机相关 Linux相关 网络技术 电脑技术 编程技术 免费资源 当前位置: 首页 > 编程技术 ...

  2. 【C++】Google Protocol Buffer(protobuf)详解(一)

    1.简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, Protocol Buffers 是一种轻便高效的结构化数据存储格式 ...

  3. Google Protocol Buffer 的使用和原理

    FROM : https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol ...

  4. 由Google Protocol Buffer的小例子引起的g++编译问题

    问题 学习 Google Protocol Buffer 的使用和原理时,提供了一个小例子,讲述了protobuf的使用方法. 假如已经有了如下文件: 其中writer.cpp如下: #include ...

  5. c++ java通信 protocol buffer,google protocol buffer (C++,Java序列化应用实例)

    google protocol buffer (C++,Java序列化使用实例) 转载,请注明出处: http://blog.csdn.net/eclipser1987/article/details ...

  6. 只用2000行代码实现google protocol buffer c++版的功能

    2019独角兽企业重金招聘Python工程师标准>>> google protocol buffer (下面简称gpb)功能强大,应用广泛,但在实际应用中,gpb需要写.proto脚 ...

  7. Google Protocol Buffer学习笔记(一)

    概述: 新公司用的平台和相关技术都与原公司使用的不同,原来是linux+thrift而现在换成了windows+protobuf了. 参考资料: https://developers.google.c ...

  8. 前端后台以及游戏中使用Google Protocol Buffer详解

    前端后台以及游戏中使用Google Protocol Buffer详解 前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf 1.下载protobuf的编 ...

  9. Google Protocol Buffer(GPB)使用之完全解析一:没有GPB的日子怎么过?

    最近,我打算介绍一下一个好用的工具,即Google Protocol Buffer(GPB)的使用,这真的是一个非常有用的工具,你应该学它,并熟练使用它. 通常来讲,应该先介绍GPB是什么,但是,在这 ...

最新文章

  1. 让WPF和SL控件同时支持绑定和赋值
  2. 比特币官网管理者Cobra认可BCH支付属性
  3. 计算机二级c语言程序,二级C语言考试系统
  4. C语言 数字和字符串的转换 error
  5. Tapestry框架概述
  6. 阿里云朱照远:边缘计算,无处不在
  7. 如何给UNIX域Socket套接字抓包?
  8. 【转】Qt QTableview使用
  9. Webpack 中 resolve 路径解析
  10. git二分法查找命令说明
  11. pp助手苹果版_苹果一键刷机助手app免费版下载-一键刷机精灵下载手机版
  12. 计算机三级数据库:课本知识点总结以及备考方案建议
  13. Hibernate一级缓存和二级缓存详解
  14. Win10访问Linux分区
  15. http://wang-min-zhao-sina-com.iteye.com/blog/1467204
  16. 【JZOJ3337】wyl8899的TLE【二分】【哈希】
  17. 使用HttpClient的时候报错java.io.IOException: Attempted read from closed stream
  18. php artisan 出错,使用php artisan serve命令获取错误
  19. MySQL的COUNT语句暗藏玄机
  20. vue移动端底部菜单tabbar

热门文章

  1. 全球及中国风力发电行业运维模式及十四五投资策略研究报告2021-2027年
  2. php视频和声音不同步,视频画面与声音不一致怎么办 视频声音比画面慢|调节画面与声音同步的方法...
  3. 菜鸟|黑客 常用站点大全! !
  4. 黄浩老师cpp平时作业(十一)矩阵乘法矩形类读写文件与结构体
  5. 百度统计数据导出服务踩的坑
  6. BA3121 地隔离放大器国产|PIN-TOP-PIN兼容替代
  7. Linux 挂载光盘
  8. kubernetes事件监控
  9. 鸿蒙宴文言知识积累,文言文鸿门宴知识点汇总
  10. 如何尽快掌握计算机技能,10个超级实用的电脑技巧,1秒完成操作,你一定要掌握!...