美文网首页
ProtocolBuffer使用

ProtocolBuffer使用

作者: AntKing | 来源:发表于2017-09-16 18:17 被阅读0次

    ProtocolBuffer环境安装

    • 客户端集成(通过cocoapods)

      • use_frameworks!
      • pod 'ProtocolBuffers-Swift'
    • 服务器集成

      • 因为服务器使用Mac编写,不能直接使用cocoapods集成

      • 因为需要将工程编译为静态库来集成

        • 到Git中下载整个库
        • 到Git中下载整个库
        • 添加: ./src/ProtocolBuffers/ProtocolBuffers.xcodeproj到项目中

    ProtocolBuffer的使用

    • 创建.proto文件
      • 在项目中, 创建一个(或多个).proto文件
      • 之后会通过该文件, 自动帮我们生成需要的源文件(比如C++生成.cpp源文件, 比如java生成.java源文件, Swift就生成.swift源文件)
    • 源码规范
    syntax = "proto2";
    
    message Person {
        required int64 id = 1;
        required string name = 2;
        optional string email = 3;
    }
    
    • 具体说明
    
    syntax = "proto2"; 为定义使用的版本号, 目前常用版本proto2/proto3
    message是消息定义的关键字,等同于C++/Swift中的struct/class,或是Java中的class
    Person为消息的名字,等同于结构体名或类名
    required前缀表示该字段为必要字段,既在序列化和反序列化之前该字段必须已经被赋值
    optional前缀表示该字段为可选字段, 既在序列化和反序列化时可以没有被赋值
    repeated通常被用在数组字段中
    int64和string分别表示整型和字符串型的消息字段
    id和name和email分别表示消息字段名,等同于Swift或是C++中的成员变量名
    标签数字1和2则表示不同的字段在序列化后的二进制数据中的布局位置, 需要注意的是该值在同一message中不能重复
    
    
    • 定义有枚举类型Protocol Buffer消息
    enum UserStatus {
        OFFLINE = 0;  //表示处于离线状态的用户
        ONLINE = 1;   //表示处于在线状态的用户
    }
    
    message UserInfo {
        required int64 acctID = 1;
        required string name = 2;
        required UserStatus status = 3;
    }
    
    
    • 定义有类型嵌套
    enum UserStatus {
        OFFLINE = 0;
        ONLINE = 1;
    }
    message UserInfo {
        required int64 acctID = 1;
        required string name = 2;
        required UserStatus status = 3;
    }
    
    message LogonRespMessage {
        required LoginResult logonResult = 1;
        required UserInfo userInfo = 2;
    }
    
    
    • 代码编写完成后, 生成对应语言代码

      • protoc person.proto --swift_out="./"
    • 便捷脚本

    
    #!/bin/sh
    SRC_DIR=./
    DST_DIR=./gen
    
    #Objective-C
    mkdir -p $DST_DIR/objective-c
    protoc -I=$SRC_DIR --objc_out=$DST_DIR/objective-c/ $SRC_DIR/*.proto
    
    #Swfit
    mkdir -p $DST_DIR/swift
    protoc -I=$SRC_DIR --swift_out=$DST_DIR/swift/ $SRC_DIR/*.proto
    
    

    相关文章

      网友评论

          本文标题:ProtocolBuffer使用

          本文链接:https://www.haomeiwen.com/subject/lakusxtx.html