zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    Qt学习之路(33): 国际化(上)
    Qt学习之路(34): 国际化(下)
    QT中文乱码与国际化支持
    MAKEINTRESOURCE
    Qt 资源系统
    用QT在Windows下编写dll程序
    MessageBox
    ADF(自动输稿器)概述
    Visio Studio中的resource.h文件.rc资源
    求正约数个数
  • 原文地址:https://www.cnblogs.com/damonxu/p/7299942.html
Copyright © 2011-2022 走看看