• 使用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.0Common7ToolsVsDevCmd.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 = 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; }

    4、根据proto生成c++代码

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

    @echo off & color 0A
    
    :: protoc程序名
    set "PROTOC_EXE=protobuf_v3.3.0cmakeuild_vs2013Releaseprotoc.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

  • 相关阅读:
    Caffe安装配置
    Ubuntu安装VMware Tools
    Ubuntu 快速下载
    09_树莓派驱动USB摄像头
    06_树莓派制作路由器
    06_树莓派搭建私有云owncloud
    05_树莓派图片定时上传到服务器
    04_远程获取树莓派文件
    03_远程监控树莓派摄像头
    js面向对象,多种创建对象方法!(转载)
  • 原文地址:https://www.cnblogs.com/damonxu/p/7299942.html
Copyright © 2020-2023  润新知