环境搭建与第一个 HelloWorld

这一章我带你搭好本地环境,再跑通一个能用的 gRPC 服务端和客户端。说白了一句话:装好工具,写个 proto,生成代码,启动验证。你在真实项目里也会重复这个流程,只不过业务逻辑越来越复杂罢了。

安装 protoc 编译器

protoc 是把 .proto 文件翻译成各种语言代码的核心工具。少了他,后面什么都干不了。

版本陷阱我踩过
我曾经在项目里用了 protoc 3.20 搭配 grpc-go 1.50,结果生成出来的代码编译不过。后来发现是 protoc 版本太旧,不支持某些新语法。建议直接装最新稳定版(目前是 3.21.x 系列或 4.x 系列,看 grpc 插件是否兼容)。

安装方式很简单:

  • Linux (Ubuntu/Debian):sudo apt install protobuf-compiler,或者去 GitHub releases 下载二进制。
  • macOS:brew install protobuf。
  • Windows:下载 exe 放到 PATH 里,我习惯丢到 C:\tools\protoc\bin。

安装完成后在终端验证:

protoc --version
# 输出类似 libprotoc 3.21.12

安装语言 gRPC 库

protoc 只负责生成消息和服务的骨架代码,真正跑起来还需要各语言的 gRPC 运行时。我按 Go、Python、Java 三派分别列一下,你挑自己用的就行。

语言 安装命令 关键依赖
Go go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
protoc-gen-go + protoc-gen-go-grpc 两个插件
Python pip install grpcio grpcio-tools grpcio 运行时,grpcio-tools 提供 protoc 的 Python 插件
Java Maven 或 Gradle 引入 io.grpc:grpc-netty-shaded io.grpc:grpc-protobuf io.grpc:grpc-stub,还需要 protoc-gen-grpc-java 插件 推荐用 build 工具管理,手动装麻烦
我个人习惯
一开始先用 Python 玩,因为 grpcio-tools 直接带了 protoc 和代码生成,省去单独配置插件的麻烦。等熟悉了概念再切其他语言。

编写第一个 HelloWorld

我拿 Python 当例子,其他语言逻辑完全一样。先创建一个 helloworld.proto:

syntax = "proto3";

package helloworld;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

然后生成代码:

python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. helloworld.proto

这条命令会生成 helloworld_pb2.py(消息类)和 helloworld_pb2_grpc.py(服务端/客户端桩代码)。

实现服务端(Python)

服务端要做的事:实现 proto 里定义的 SayHello 方法,然后启动 gRPC server 监听一个端口。看代码:

from concurrent import futures
import grpc
import helloworld_pb2
import helloworld_pb2_grpc

class GreeterServicer(helloworld_pb2_grpc.GreeterServicer):
    def SayHello(self, request, context):
        return helloworld_pb2.HelloReply(message=f"Hello, {request.name}!")

def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    helloworld_pb2_grpc.add_GreeterServicer_to_server(GreeterServicer(), server)
    server.add_insecure_port("[::]:50051")
    server.start()
    server.wait_for_termination()

if __name__ == "__main__":
    serve()

嗯,注意 max_workers 设成 10 就行,别设太大,不然调度开销反而高。我线上一般用 100,但开发机没必要。

实现客户端(Python)

客户端更简单:连接服务端,构造请求,调用 RPC 拿响应。

import grpc
import helloworld_pb2
import helloworld_pb2_grpc

def run():
    with grpc.insecure_channel("localhost:50051") as channel:
        stub = helloworld_pb2_grpc.GreeterStub(channel)
        response = stub.SayHello(helloworld_pb2.HelloRequest(name="World"))
        print(f"收到的响应: {response.message}")

if __name__ == "__main__":
    run()

运行测试

先开终端跑服务端,再另开一个终端跑客户端。如果看到 Hello, World!,恭喜你,第一个 gRPC 通信已经通了。

首次运行时你可能遇到 ImportError: cannot import name 'grpc',八成是虚拟环境没激活或者 grpcio 没装。我建议你用 python -m pip list | grep grpc 确认一下。

下面是本章的知识关系图,帮你把整个流程串起来:

环境搭建与 HelloWorld 流程 第2章:gRPC 环境搭建整体流程 安装 protoc 安装 gRPC 库 定义 .proto 生成桩代码 实现服务端 实现客户端 启动 & 测试 💡 关键顺序 protoc → 各语言库 → .proto → 生成代码 → 服务端/客户端 → 运行验证

你只要按图里的路径走一遍,环境搭建就算合格了。往后学各种拦截器、令牌化改造,都是在这个骨架上加肉。别急,稳扎稳打。