与Google Protocol Buffer亲密接触
前言
今天给大家介绍一位公众号的贵客:
姓名: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环境下编写
Mac与window命令唯一的区别就是需要将 protoc
改成 protoc.exe
前提是需要添加环境变量。
3. 编写一个proto文件
文件保存为 chat.proto
此 proto
文件摘自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亲密接触相关推荐
- windows下Google Protocol Buffer 编译安装(vs)教程
蒲公英的博客 分享技术带来的快乐 Kuaile.IN 搜索 首页 安卓相关 WordPress 主机相关 Linux相关 网络技术 电脑技术 编程技术 免费资源 当前位置: 首页 > 编程技术 ...
- 【C++】Google Protocol Buffer(protobuf)详解(一)
1.简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, Protocol Buffers 是一种轻便高效的结构化数据存储格式 ...
- Google Protocol Buffer 的使用和原理
FROM : https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol ...
- 由Google Protocol Buffer的小例子引起的g++编译问题
问题 学习 Google Protocol Buffer 的使用和原理时,提供了一个小例子,讲述了protobuf的使用方法. 假如已经有了如下文件: 其中writer.cpp如下: #include ...
- c++ java通信 protocol buffer,google protocol buffer (C++,Java序列化应用实例)
google protocol buffer (C++,Java序列化使用实例) 转载,请注明出处: http://blog.csdn.net/eclipser1987/article/details ...
- 只用2000行代码实现google protocol buffer c++版的功能
2019独角兽企业重金招聘Python工程师标准>>> google protocol buffer (下面简称gpb)功能强大,应用广泛,但在实际应用中,gpb需要写.proto脚 ...
- Google Protocol Buffer学习笔记(一)
概述: 新公司用的平台和相关技术都与原公司使用的不同,原来是linux+thrift而现在换成了windows+protobuf了. 参考资料: https://developers.google.c ...
- 前端后台以及游戏中使用Google Protocol Buffer详解
前端后台以及游戏中使用Google Protocol Buffer详解 前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf 1.下载protobuf的编 ...
- Google Protocol Buffer(GPB)使用之完全解析一:没有GPB的日子怎么过?
最近,我打算介绍一下一个好用的工具,即Google Protocol Buffer(GPB)的使用,这真的是一个非常有用的工具,你应该学它,并熟练使用它. 通常来讲,应该先介绍GPB是什么,但是,在这 ...
最新文章
- 让WPF和SL控件同时支持绑定和赋值
- 比特币官网管理者Cobra认可BCH支付属性
- 计算机二级c语言程序,二级C语言考试系统
- C语言 数字和字符串的转换 error
- Tapestry框架概述
- 阿里云朱照远:边缘计算,无处不在
- 如何给UNIX域Socket套接字抓包?
- 【转】Qt QTableview使用
- Webpack 中 resolve 路径解析
- git二分法查找命令说明
- pp助手苹果版_苹果一键刷机助手app免费版下载-一键刷机精灵下载手机版
- 计算机三级数据库:课本知识点总结以及备考方案建议
- Hibernate一级缓存和二级缓存详解
- Win10访问Linux分区
- http://wang-min-zhao-sina-com.iteye.com/blog/1467204
- 【JZOJ3337】wyl8899的TLE【二分】【哈希】
- 使用HttpClient的时候报错java.io.IOException: Attempted read from closed stream
- php artisan 出错,使用php artisan serve命令获取错误
- MySQL的COUNT语句暗藏玄机
- vue移动端底部菜单tabbar
热门文章
- 全球及中国风力发电行业运维模式及十四五投资策略研究报告2021-2027年
- php视频和声音不同步,视频画面与声音不一致怎么办 视频声音比画面慢|调节画面与声音同步的方法...
- 菜鸟|黑客 常用站点大全! !
- 黄浩老师cpp平时作业(十一)矩阵乘法矩形类读写文件与结构体
- 百度统计数据导出服务踩的坑
- BA3121 地隔离放大器国产|PIN-TOP-PIN兼容替代
- Linux 挂载光盘
- kubernetes事件监控
- 鸿蒙宴文言知识积累,文言文鸿门宴知识点汇总
- 如何尽快掌握计算机技能,10个超级实用的电脑技巧,1秒完成操作,你一定要掌握!...