Python通过proto协议搭建grpc服务详解-grpc响应数据结构的构成

本文详细介绍了如何使用Python通过proto协议搭建gRPC服务,包括gRPC的特性、proto语法、服务端和客户端的创建,以及服务端响应数据结构的构建。读者将学习到如何定义proto服务,安装相关依赖,生成Python调用格式和gRPC服务接口,并实现服务端和客户端的通信。
摘要由CSDN通过智能技术生成

grpc介绍:

gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。

在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。gRPC 提供了一种简单的方法来定义服务,同时客户端可以充分利用 HTTP2 stream 的特性,从而有助于节省带宽、降低 TCP 的连接次数、节省CPU的使用等。

特性
  • 基于HTTP/2

HTTP/2 提供了连接多路复用、双向流、服务器推送、请求优先级、首部压缩等机制。可以节省带宽、降低TCP链接次数、节省CPU,帮助移动设备延长电池寿命等。gRPC 的协议设计上使用了HTTP2 现有的语义,请求和响应的数据使用HTTP Body 发送,其他的控制信息则用Header 表示。

  • IDL使用ProtoBuf

gRPC使用ProtoBuf来定义服务,ProtoBuf是由Google开发的一种数据序列化协议(类似于XML、JSON、hessian)。ProtoBuf能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面。压缩和传输效率高,语法简单,表达力强。

  • 多语言支持 ( C, C++, Python, PHP, Nodejs, C#, Objective-C、Golang、Java)

gRPC支持多种语言,并能够基于语言自动生成客户端和服务端功能库。目前已提供了C版本grpc、Java版本grpc-java 和 Go版本grpc-go,其它语言的版本正在积极开发中,其中,grpc支持C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#等语言,grpc-java已经支持Android开发。

gRPC已经应用在Google的云服务和对外提供的API中,其主要应用场景如下:

  • 低延迟、高扩展性、分布式的系统
  • 同云服务器进行通信的移动应用客户端
  • 设计语言独立、高效、精确的新协议
  • 便于各方面扩展的分层设计,如认证、负载均衡、日志记录、监控等

proto语法

ps:最近编写的一个proto协议----decodereq.proto

syntax = "proto3";  // 指定协议版本,如果你不指定,protocol buffer 编译器就会认为你使用的是proto2的语法。
					// 这个语句必须出现在.proto文件的非空非注释的第一行。
package DecodePortrait;   // 指定包,防止不同协议之间命名冲突

message PortraitDecodeReq {
   
  repeated string UP = 1;    //UserPortrait加密数据列表
  // repeated 表示该字段可重复,传值是给一个列表
}
"""
# message编写格式
message  数据名 {
数据类型 数据名 =  字段唯一数字标识;

}
注:已定义的message可以当做已知数据类型使用
"""
message LocationInfo {
   
    string country = 1;        //地域所属国家
    string prov = 2;        //地域所属省
    string city = 3;        //地域所属市
}

message UserInfo {
   
    uint32 gender = 1;        // 用户性别,0:未知,1:男,2:女
    uint32 age = 2;           // 用户年龄,0:未知
    repeated string profession = 4;    // 职业
    repeated string education = 5;     // 学历
}

message Interests {
   
	repeated string interest_category_one = 1;  // 兴趣一级分类
    repeated string interest_disease = 2;       // 兴趣疾病
    repeated string interest_tag = 3;           // 兴趣标签
    repeated string interest_keyword = 4;       // 兴趣关键词
	repeated string interest_category_two = 5;  // 兴趣二级分类
	repeated string interest_category_three = 6;// 兴趣三级分类
}

message UP_Res{
   
    UserInfo userinfo = 1;        //用户基础信息
    LocationInfo location = 2;  //地理位置信息
    Interests interests = 3;     //用户兴趣信息
}
"""
UP_Res中使用上面定义的UserInfo、LocationInfo、Interests等message类型定义
"""
message Resp{
   
    repeated UP_Res UPRes_list = 1;  //所有数据的列表
}
"""
Resp中构建UP_Res的列表,可根据需求自行定制
"""

service Decode {
   
    rpc DecodeReq(PortraitDecodeReq) returns (Resp){
   }
    
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Python搭建gRPC,你需要按照以下步骤进行操作: 1. 首先,你需要定义一个.proto文件,该文件描述了你的服务和消息类型。你可以使用Protocol Buffers语言来定义.proto文件。例如,你可以创建一个名为hello.proto的文件来定义你的服务和消息类型。 2. 接下来,你需要使用gRPC的工具包来生成gRPC服务类。你可以使用以下命令来生成服务类: ``` python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. hello.proto ``` 这将生成一个名为hello_pb2.py的文件,其中包含你定义的消息类型,以及一个名为hello_pb2_grpc.py的文件,其中包含你定义的gRPC服务类。\[2\] 3. 如果你的.proto文件依赖其他.proto文件,你需要在生成服务类之前先生成这些依赖文件的服务类。你可以使用类似的命令来生成这些依赖文件的服务类。例如: ``` python -m grpc_tools.protoc -I. --python_out=../grpc_file --grpc_python_out=../grpc_file receivedata.proto ``` 这将生成一个名为receivedata_pb2.py的文件和一个名为receivedata_pb2_grpc.py的文件,用于处理receivedata.proto文件中定义的消息类型和gRPC服务类。\[1\] 4. 一旦你生成了gRPC服务类,你就可以在Python代码中使用它们来实现你的gRPC服务。你可以根据你的需求编写服务器端和客户端代码,并使用生成的服务类来处理请求和发送响应。 总结起来,要在Python搭建gRPC,你需要定义.proto文件,使用gRPC的工具包生成服务类,处理依赖文件的服务类,并在Python代码中使用生成的服务类来实现你的gRPC服务。\[2\]\[3\] #### 引用[.reference_title] - *1* [用python 搭建一个grpc服务](https://blog.csdn.net/m0_37772653/article/details/127785777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [gRPC 框架 简单使用(python版)](https://blog.csdn.net/Java_KW/article/details/124334604)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python如何实现GRPC服务python实现简单的grpc通信](https://blog.csdn.net/qq_36583400/article/details/126558846)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值