前端后台以及游戏中使用google-protobuf详解
[TOC]
0、什么是protoBuf
protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更小更快更简单。你可以用定义自己protoBuf的数据结构,用ProtoBuf编译器生成特定语言的源代码,如C++,Java,Python等,目前protoBuf对主流的编程语言都提供了支持,非常方便的进行序列化和反序列化。
特点:
平台无关、语言无关。
二进制、数据自描述。
提供了完整详细的操作API。
高性能 比xml要快20-100倍
尺寸小 比xml要小3-10倍 高可扩展性
数据自描述、前后兼容
1、下载protobuf的编译器
2、配置环境变量
解压 protoc-3.5.1-osx-x86_64.zip
Mac 配置环境变量 vi ~/.bash_profile 使其配置生效source ~/.bash_profile
#protobuf
export PROTOBUF_HOME=/Users/Javen/Documents/dev/java/protobuf/protoc-3.5.1-osx-x86_64
export PATH=$PATH:$PROTOBUF_HOME/bin
Window 将bin添加到path 即可 例如:D:\protobuf\protoc-3.5.1-win32\bin
本文在Mac环境下编写 Mac与window命令唯一的区别就是需要将protoc改成protoc.exe 前提是需要添加环境变量。
3、编写一个proto文件
文件保存为chat.proto 此proto文件摘自t-io 让天下没有难开发的网络编程
syntax = "proto3";
package com.im.common.packets;
option java_package = "com.im.common.packets"; //设置java对应的package
option java_multiple_files = true; //建议设置为true,这样会每个对象放在一个文件中,否则所有对象都在一个java文件中
/**
* 聊天类型
*/
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
i