protobuf示例 2023-05-02 约 739 字 预计阅读 2 分钟 文章目录 【注意】最后更新于 May 2, 2023,文中内容可能已过时,请谨慎使用。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 // 注释: 1. //单行注释 2. /* */ 多行注释 syntax = "proto3"; // 明确使用protobuf版本 默认不写 则是proto2 package com.test; // 定义包package // 官方文档: https://developers.google.com/protocol-buffers/docs/proto3 import "./pk2.proto"; //导入protoW文件 option go_package = "proto"; // 如果使用protoc编译为java代码 则按照这个包名称生成 忽略 com.test option java_package = "com.hello"; // 如果是编译为go代码 则按照com.hello包名生成 // 定义message信息 message Keyword { string value = 1; } // 定义一个消息message参数 message QueryData{ // 基本数据类型字段定义 基本数据类型都能涵盖 string bool int double bytes等等 string name = 1; string orderBy = 2; double weight = 3; float searchWeight = 4; int32 type = 5; uint64 id = 6; fixed32 type2 = 7; fixed64 type3 = 8; bool isOk = 9; bytes passWord = 10; // 定义数组 类似 []string repeated string cases = 11; // 定义map类型 string=>string map <string,string> myMap = 15; // oneof可选字段 里面的字段只能出现一个或者0个 oneof OptionField { string selectWord = 12; string queryType = 13; } // 定义枚举类型 enum WeekDay { SUNDAY = 0; // 枚举类型 必须第一个值是0 MONDAY = 1; TUESDAY = 2; } WeekDay selectDay = 14; // keyword 复合字段类型 引用上面定义好的Keyword类型 Keyword kw = 16; } // 定义接口返回message格式 message QueryResponse { int32 code = 1; string msg = 2; string htmlData = 3; } // 定义rpc服务 一般指gRPC比较多 service QueryApi { // 1.grpc中的一元rpc接口 很普通 可以理解为正常的http接口差不多 rpc Query (QueryData) returns (QueryResponse){}; // 2.基于服务端"流式"rpc接口 建立连接以后 服务端可以向客户端发数据 rpc ServerQueryStyle(QueryData) returns (stream QueryResponse) {}; // 3.基于服务端"流式"rpc接口 和第一种不太一样的是 这种方式基于"流"传输 而不是发送一次请求响应后就断开 rpc ClientQueryStyle(stream QueryData) returns (QueryResponse) {}; // 4.基于客户端,服务端"双向流式"rpc接口 全双工通信 双方可以互相发送数据 rpc ClientAndServerStreamQuery(stream QueryData) returns (stream QueryResponse){}; } 文章作者 sunhuawei 上次更新 2023-05-02