使用protobuf传递网络消息

一、获取protobuf及相关依赖c++

新建install_protobuf.bat脚本,粘贴如下代码git

::参考文章 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

二、编译github

新建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可执行文件工具

三、下面咱们来编写protoui

// 指定语法规则 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 = 1;
    optional string usrName = 2;
    optional int32 passWd = 3;
}

message LoginResp // 登陆响应
{
     optional int32 roleID = 1;
     optional int32 errCode = 2;
   optional RoleInfo roleInfo = 3;
}

message LoginNoti //登陆通知
{
    optional int32 roleID = 1;
    optional RoleInfo roleInfo = 2; 
}
message RoleInfo
// 角色信息 {   optional int32 roleID = 1;   optional string name = 2;   optional int32 age = 3;   optional int32 sex = 4; }

四、根据proto生成c++代码google

新建gen.bat脚本,粘贴如下代码spa

@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++文件操作系统

五、定义消息管理类,根据MSGID分发消息code

六、如客户端服务器使用不一样语言,能够生成相应语言的protobuf