使用protobuf传递网络消息
1、获取protobuf及相关依赖
新建install_protobuf.bat脚本,粘贴以下代码
::参考文章 https://github.com/google/protobuf/blob/master/cmake/README.md
::默认当前操作系统已安装 git 和 cmake,并配置好了环境变量
echo off & color 0A ::设置所需要的Protobuf版本,最新版本可以在github上查到 https://github.com/google/protobuf
set PROTOBUF_VESION="v3.3.0"
echo %PROTOBUF_VESION%
set PROTOBUF_PATH="protobuf_%PROTOBUF_VESION%"
echo %PROTOBUF_PATH% ::从githug上拉取protobuf源代码
git clone -b %PROTOBUF_VESION% https://github.com/google/protobuf.git %PROTOBUF_PATH% ::从github上拉取gmock
cd %PROTOBUF_PATH%
git clone -b release-1.7.0 https://github.com/google/googlemock.git gmock ::从github上拉取gtest
cd gmock
git clone -b release-1.7.0 https://github.com/google/googletest.git gtest pause
2、编译
新建build_protobuf.bat脚本,粘贴以下代码
::参考文章 https://github.com/google/protobuf/blob/master/cmake/README.md
::默认当前操作系统已安装 git 和 cmake,并配置好了环境变量
echo off & color 0A ::设置所需要的Protobuf版本,最新版本可以在github上查到 https://github.com/google/protobuf
::必须与下载的版本一致
set PROTOBUF_VESION="v3.3.0"
echo %PROTOBUF_VESION%
set PROTOBUF_PATH="protobuf_%PROTOBUF_VESION%"
echo %PROTOBUF_PATH%
cd %PROTOBUF_PATH% ::设置VS工具集,相当于指定VS版本,取决于VS的安装路径
set VS_DEV_CMD="D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat"
::设置工程文件夹名字,用来区分不同的VS版本
set BUILD_PATH="build_vs2013"
::设置编译版本 Debug Or Release
set MODE="Release" cd cmake
if not exist %BUILD_PATH% md %BUILD_PATH% cd %BUILD_PATH%
if not exist %MODE% md %MODE%
cd %MODE% ::开始构建和编译
call %VS_DEV_CMD%
cmake ../../ -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=%MODE%
call extract_includes.bat
nmake /f Makefile echo %cd%
pause
编译完成,我们得到protobuf可执行文件
3、下面我们来编写proto
// 指定语法规则 proto2 or proto3,不写的话会有警告,默认使用proto2语法规则
syntax = "proto2"; enum MSGID_XXXSERVER // 定义消息ID
{
MSGID_CS_REQ_Login = 0x0100;
MSGID_CS_RESP_Login = 0x0200;
MSGID_CS_NOTI_Login = 0x0300;
} message LoginReq // 登录请求
{
optional int32 roleID = ;
optional string usrName = ;
optional int32 passWd = ;
} message LoginResp // 登录响应
{
optional int32 roleID = ;
optional int32 errCode = ;
optional RoleInfo roleInfo = ;
} message LoginNoti //登录通知
{
optional int32 roleID = ;
optional RoleInfo roleInfo = ;
}
message RoleInfo // 角色信息
{
optional int32 roleID = ;
optional string name = ;
optional int32 age = ;
optional int32 sex = ;
}
4、根据proto生成c++代码
新建gen.bat脚本,粘贴以下代码
@echo off & color 0A :: protoc程序名
set "PROTOC_EXE=protobuf_v3.3.0\cmake\build_vs2013\Release\protoc.exe"
:: .proto文件名
set "PROTOC_FILE_NAME=test.proto" set "PROTOC_PATH=%cd%"
set "CPP_OUT_PATH=%cd%" ::生成.h和.cc
"%PROTOC_PATH%\%PROTOC_EXE%" --proto_path="%PROTOC_PATH%" --cpp_out="%CPP_OUT_PATH%" "%PROTOC_PATH%\%PROTOC_FILE_NAME%"
pause
我们得到下面两个c++文件
5、定义消息管理类,根据MSGID分发消息
6、如客户端服务器使用不同语言,可以生成相应语言的protobuf
使用protobuf传递网络消息的更多相关文章
- 《炉石传说》建筑设计欣赏(7):采用Google.ProtocolBuffers处理网络消息
这一次,琢磨了一下Unity3D网络游戏发展的网络信息处理.服务器的网络游戏一般都是自主研发,因此,相应的网络消息处理应该培养自己.client/现在使用的邮件服务器之间的价差JSON和Google. ...
- 使用Retrofit2+RxJava2+ProtoBuf实现网络请求
引言 Retrofit 是一个用于 Android 和 Java 平台的类型安全的,底层使用OkHttp实现网络请求框架.Retrofit 通过将 API 抽象成 Java 接口而让我们连接到 RES ...
- iOS/Android网络消息推送的实现两种方法
移动时代,用户为王,而每个APP拥有的活跃用户量(Active Users),决定了其价值. 消息推送成为了不可或缺的活跃唤起工具. 目前消息推送有如下两种途径: 1.iOS传统方式: 通过Apple ...
- 使用Protobuf定义网络协议
准备工具: 工具下载地址如下:https://github.com/protocolbuffers/protobuf/releases/tag/v3.6.1,主要使用到的文件有: protoc.exe ...
- 使用tcpdump监控网络消息发送
tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具. tcpd ...
- C++ TCP客户端网络消息发送接收同步实现
废话不多说, 直入主题, 我们在写客户单的时候希望在哪里发消息出去,然后在哪里返回消息(同步), 然后继续往下运行-, 而不是在这里发送了一个消息给服务端, 在另一个地方接受消息(异步) , 也不知道 ...
- Google protobuf解析消息逻辑的版本问题
在分析caffe2源码的过程中,由于caffe2使用protobuf作为网络结构和网络参数序列化和反序列化的机制,想在反序列化之前进行加解密处理,这是反向protouf其实有两个版本的实现来进行消息的 ...
- 网络协议之:WebSocket的消息格式
目录 简介 WebSocket的握手流程 webSocket的消息格式 Extensions和Subprotocols 总结 简介 我们知道WebSocket是建立在TCP协议基础上的一种网络协议,用 ...
- iOS中消息的传递机制
本文中,会经常提及接收者[recipient]和发送者[sender].在消息传递机制中具体是什么意思,我们可以通过一个示例来解释:一个table view是发送者,而它的delegate就是接收者. ...
随机推荐
- js 算法排序总结
1.冒泡排序JavaScript代码实现: function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i ...
- 20180429NOIP提高组精英班Day1测试
- windows下python-nmap运行过程中出现的问题及解决办法
python-nmap 运行时出现了一下错误 D:\python\untitled5\Scripts\python.exe D:/python/untitled5/test.py Traceback ...
- LVM和RAID
RAID: Redundant Arrays of Inexpensive Disks Independent Berkeley: A case for Redundent Arrays of Ine ...
- JS布尔值(Boolean)转换规则
原文作者: louis 原文链接: http://louiszhai.github.io/2015/12/11/js.boolean/ 语法 众所周知, JavaScript有五个基本的值类型:num ...
- BZOJ 1631 Usaco 2007 Feb. Cow Party
[题解] 最短路裸题.. 本题要求出每个点到终点走最短路来回的距离,因此我们先跑一遍最短路得出每个点到终点的最短距离,然后把边反向再跑一遍最短路,两次结果之和即是答案. #include<cst ...
- 8.3 操作MongoDB数据库
一项权威调查显示,在大数据时代软件开发人员必备的十项技能中MongoDB数据库名列第二,仅次于HTML5.MongoDB是一个基于分布式文件存储的文档数据库,可以说是非关系型(Not Only SQL ...
- HOG特征过程解释(转)
1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的 ...
- 【ACM】nyoj_14_会场安排问题_201308151955
会场安排问题时间限制:3000 ms | 内存限制:65535 KB 难度:4描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安 ...
- J - Simpsons’ Hidden Talents
Homer: Marge, I just figured out a way to discover some of the talents we weren’t aware we had. Marg ...