grpc python实现_GitHub - leisurelicht/grpc-demo: 使用 python3 和 go 实现的一个 gprc 的 demo...

本文介绍如何使用gRPC框架,通过Python3作为客户端和Go作为服务端,实现数据传输。首先定义ProtoBuf3数据格式,然后自动生成Python和Go的代码。服务端接收账号和密码,进行Base64编码并返回给客户端。详细步骤包括定义数据格式、生成代码、编写服务端和客户端代码,以及运行示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gRPC-demo

gRPC是Google开源的一个跨语言和平台的高性能RPC框架。

他的主要特性有:

使用基于HTTP/2的传输协议。带来诸如双向流、流控、头部压缩、单TCP连接上的多复用请求等特性。

使用基于ProtoBuf3.x的数据序列化协议。

可以自动生成多种语言的代码

在这个项目中,我将演示如何使用gRPC创建一个简单的服务,我会用Go作为服务端提供服务,Python3作为客户端调用服务。

在这里,客户端会向服务端发送一组账号和密码。服务端接收到账号和密码后,会将其打印出来,同时拼接后进行Base64编码,然后再返回给客户端。

下面我们就正式开始。

1. 定义数据格式

首先我们使用protobuf定义传输的数据格式.这里我们需要创建protobuf/auth.proto文件,并在里面定义我们要传输和返回的数据格式,以及可以被远程调用的函数。代码看这里。

2. 自动生成代码

定义好数据格式以后,我们要使用protoc自动生成客户端和服务端代码。这里你需要先安装protoc。

mac用户可以直接用 brew install protobuf 安装。

首先生成Python3需要使用的代码。

使用 pip3 install -r requirements.txt 命令安装Python3所需要的包

python3 -m grpc_tools.protoc -I protobuf/ --python_out=./protobuf --grpc_python_out=./protobuf protobuf/auth.proto

这条命令会自动在protobuf文件夹中生成文件 auth_pb2.py 和 auth_pb2_grpc.py。

生成Go需要使用的服务端代码

使用 go get -u google.golang.org/grpc 安装 go 的 grpc,由于墙的原因,我们可能需要一些别的方法,看这里。

protoc -I protobuf/ --go_out=plugins=grpc:protobuf/ protobuf/auth.proto

这条命令会自动在protobuf文件夹中生成文件 auth.pb.go。

这三个文件我们将在后面编码中使用。

3. 编写服务端和客户端代码

Go服务端代码请看看server.go文件。

在server.go文件中主要用到了auth.pb.go文件中的三个接口,如下图:

Python客户端代码请看client.py文件。

在这里我稍微修改了一下auth_pb2_grpc.py文件,以解决导入出错的问题,如下图:

4. 运行服务

启动Server:

go run server.go

启动client:

python3 client.py

可以看到server收到账号密码,拼接在一起后对其进行Base64编码,然后返回给了客户端。

### 解决 gRPC 项目编译时 `protoc` 插件未找到或不可执行的问题 当在编译 gRPC 项目时遇到 `protoc` 插件未找到或不可执行的错误,通常是因为以下原因之一引起的: #### 1. **Protobuf 编译器 (`protoc`) 及其插件路径设置不正确** 如果系统的环境变量 `$PATH` 中没有包含 `protoc` 执行文件的位置,则会导致找不到对应的插件。因此,确认 `protoc` 是否已成功安装以及是否位于系统 PATH 中至关重要[^1]。 - 检查 `protoc` 是否可用: ```bash which protoc ``` 若返回为空,则说明尚未正确安装或配置路径。 - 将 `protoc` 添加到 PATH 中(假设它已被安装至 `/usr/local/bin/`): ```bash export PATH=$PATH:/usr/local/bin/ ``` #### 2. **gRPC Protocol Buffers Compiler Plugin (grpc_cpp_plugin) 缺失或损坏** 此外,还需要验证 `grpc_cpp_plugin` 是否存在并且具有可执行权限。这个插件负责生成用于 gRPC 的 stubs service 接口代码[^2]。 - 查找插件位置并测试其状态: ```bash ls /usr/local/bin/grpc_cpp_plugin chmod +x /usr/local/bin/grpc_cpp_plugin ``` #### 3. **构建工具链中的依赖关系问题** 当前使用的构建工具可能未能正确定位所需的外部资源。例如,在 Makefile 或 CMakeLists.txt 文件里指定了错误的目标平台架构或是链接选项不当等情形均会引发此类异常行为[^3]。 - 修改 CMakeLists.txt 来明确指定插件地址: ```cmake set(PROTOBUF_PROTOC_EXECUTABLE "/absolute/path/to/your/protoc") set(GRPC_CPP_PLUGIN_PATH "/absolute/path/to/your/grpc_cpp_plugin") find_program(Protobuf_PROTOC NAMES ${PROTOBUF_PROTOC_EXECUTABLE}) include_directories(${GRPC_INCLUDE_DIR} ${PROTOCOL_BUFFERS_INCLUDE_DIRS}) add_custom_command( OUTPUT "${generated_file}" COMMAND ${PROTOBUF_PROTOC} --plugin=protoc-gen-grpc="${GRPC_CPP_PLUGIN_PATH}" ... ) ``` #### 示例调整后的部分 CMake 配置片段展示 ```cmake find_package(gRPC REQUIRED) message(STATUS "Found gRPC: ${gRPC_LIBRARIES}") set(CMAKE_CXX_FLAGS "-std=c++17") add_executable(my_grpc_app main.cc) target_link_libraries(my_grpc_app PRIVATE gRPC::grpc++ Protobuf::libprotobuf ) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值