这是一个最简的 gRPC 跨语言示例项目,包含:
- IDL:
idl/simple_svr.proto - Go 实现:
golang/(含服务端与客户端) - Python 实现:
python/(含服务端与客户端)
你可以用 Go 服务端 ↔ Python 客户端,或 Python 服务端 ↔ Go 客户端进行互通验证。
simple-grpc-example/
├── idl/ # .proto definitions
├── golang/ # Go server/client and generated code
└── python/ # Python server/client and generated code
- 已安装 protobuf 工具链 / Protobuf toolchain installed
protoc≥ 25.1
- 已安装 gRPC 相关插件 / gRPC plugins
- Go:
protoc-gen-go,protoc-gen-go-grpc - Python:
grpcio,grpcio-tools
- Go:
- Go ≥ 1.24, Python ≥ 3.12
注:本仓库已包含生成好的代码(Go 在 golang/grpc_gen/,Python 在 python/)。如需重新生成见下文“代码生成”。
测试时 go, python 二选一
- 启动服务端
cd golang
go run ./cmd/server- 运行客户端
cd golang
go run ./cmd/client- 安装依赖
cd python
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt- 启动服务端
python server.py- 运行客户端
python client.py- 启动 Go 服务端,然后用 Python 客户端访问
- 启动 Python 服务端,然后用 Go 客户端访问
两种组合都应返回相同/一致的响应,便于验证协议定义与实现一致性。
# 安装插件(如未安装)
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
# 生成到 golang/grpc_gen/simple_svr/
protoc \
-I ./idl \
--go_out=./golang \
--go-grpc_out=./golang \
./idl/simple_svr.protopython -m grpc_tools.protoc \
-I ./idl \
--python_out=./python \
--grpc_python_out=./python \
./idl/simple_svr.proto-
端口占用
- 修改服务端监听端口,或释放占用端口
-
版本不兼容
- 确保
protoc与语言插件版本匹配
- 确保
MIT