0、什么是protoBuf
protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更小更快更简单。你可以用定义自己protoBuf的数据结构,用ProtoBuf编译器生成特定语言的源代码,如C++,Java,Python等,目前protoBuf对主流的编程语言都提供了支持,非常方便的进行序列化和反序列化。
特点:
- 平台无关、语言无关。
- 二进制、数据自描述。
- 提供了完整详细的操作API。
- 高性能 比xml要快20-100倍
- 尺寸小 比xml要小3-10倍 高可扩展性
- 数据自描述、前后兼容
1、下载protobuf的编译器
目前最新版本为Protocol Buffers v3.5.1
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/binWindow 将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 int32 toId = 6; //目标用户id string toNick = 7; //目标用户nick string group = 8; //目标组id }4、编译器对其进行编译
4.1 编译为Java
进入到项目的跟目录执行以下编译命名,com/im/common/packets为
