You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何运行Python实现的gRPC客户端与C++实现的服务端?

gRPC 跨语言开发(Python客户端/C++服务端)实操指南

先搞懂核心概念,别上来就瞎跑代码

  • Protobuf:gRPC默认的序列化协议,所有接口定义、传输的数据结构都写在.proto后缀的文件里,不管你用什么语言写客户端/服务端,都靠这个文件生成对应语言的接口代码,是跨语言能通信的核心契约,缺了它啥都跑不起来
  • 服务端:负责实现.proto里定义好的服务接口逻辑,绑定端口监听客户端发过来的请求,处理完返回结果,你手里的server.cpp就是C++写的服务端逻辑实现
  • 客户端:gRPC会自动生成对应语言的存根(Stub),你直接调用存根里的方法就行,不用自己写TCP连接、序列化、网络收发这些底层逻辑,client.py就是Python写的客户端调用逻辑
  • Makefile:一般是提前写好的自动化脚本,包含了Protobuf代码生成、C++服务端编译、依赖库链接的所有命令,不用你手动敲一长串编译参数

跑代码前先检查文件完整性

你当前目录下除了client.py、server.cpp、Makefile,必须要有对应的.proto接口定义文件,一般命名类似hello.proto、rpc_service.proto,这是所有代码生成的源头,没有的话先找提供代码的人要。

按顺序执行就能跑通

  1. 先执行Protobuf代码生成+服务端编译,直接在当前目录跑命令:
    make
    执行完目录里会多出自动生成的代码文件:
    • C侧:xxx.pb.h、xxx.pb.cc(Protobuf数据结构的序列化/反序列化代码)、xxx.grpc.pb.h、xxx.grpc.pb.cc(gRPC C端的存根代码)
    • Python侧:xxx_pb2.py(Python版的数据结构代码)、xxx_pb2_grpc.py(Python版的客户端存根代码)

    如果make报错,先补依赖:C++端提前装grpc、protobuf、grpc-dev的系统开发包;Python端提前用pip装grpcio、grpcio-tools两个包。

  2. 启动C服务端:
    make执行成功后会生成C
    服务端的可执行文件,一般就叫server,直接跑:
    ./server
    正常启动后终端会打印监听端口的日志(默认一般是0.0.0.0:50051),这个终端别关,服务端要一直挂着。
  3. 启动Python客户端:
    新开一个终端,切到同一个目录,执行:
    python3 client.py
    正常情况下客户端会发起请求,收到服务端的返回结果并打印在终端,说明整个gRPC链路跑通了。

日常修改操作方法

  • 要改接口定义、传输数据结构:别直接改自动生成的pb后缀文件,直接改.proto源文件,改完重新执行make生成所有语言的新代码,再重启服务端、重跑客户端就行
  • 要改服务端业务逻辑:直接改server.cpp里对应服务方法的实现代码,改完重新执行make编译,重启服务端就生效
  • 要改客户端调用逻辑:直接改client.py里的请求参数构造、方法调用逻辑,改完不用编译,直接重跑Python脚本就行

常见踩坑点

  • 服务端监听的地址端口必须和客户端连接的地址端口一致,别服务端绑了50051端口,客户端写50052,肯定连不上
  • Python客户端导入pb文件报错的话,把生成的_pb2.py、_pb2_grpc.py文件放到和client.py同目录,或者手动把当前目录加到Python导入路径里
  • 改完.proto文件一定要两端都重新生成代码,别只更了C++端或者只更了Python端,会出现字段对不上、序列化失败的问题

内容的提问来源于stack exchange,提问作者Vsdm in

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:36:21