gRPC 是一个高性能、跨语言的 RPC 框架,由 Google 开发。本文将为您介绍 gRPC 的基础知识。

1. 简介

gRPC 是一个高性能、跨语言的 RPC 框架,支持多种语言,包括 C++, Java, Python, Go, Ruby, C# 等。它基于 HTTP/2 和 Protocol Buffers。

2. 特点

  • 高性能:使用 HTTP/2 协议,支持流式传输和多路复用,减少延迟和带宽消耗。
  • 跨语言:支持多种语言,方便开发者使用。
  • 易于集成:可以与各种框架和工具集成,如 gRPC-Web、gRPC-Netty 等。
  • 可扩展性强:支持自定义负载均衡、认证、日志等。

3. 安装

3.1 Python

pip install grpcio grpcio-tools

3.2 Java

# 使用 Maven
<dependencies>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.40.1</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-protobuf</artifactId>
        <version>1.40.1</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-stub</artifactId>
        <version>1.40.1</version>
    </dependency>
</dependencies>

4. 示例

以下是一个简单的 gRPC 服务示例。

4.1 Protocol Buffers 定义

syntax = "proto3";

option java_multiple_files = true;
option java_package = "com.example.grpc";
option java_outer_classname = "GreeterProto";

package greeter;

// 定义服务
service Greeter {
  // 定义方法
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// 定义消息
message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

4.2 生成代码

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

4.3 客户端

import grpc

# 连接到服务器
with grpc.insecure_channel('localhost:50051') as channel:
    stub = greeter_pb2.GreeterStub(channel)

    # 调用方法
    response = stub.SayHello(greeter_pb2.HelloRequest(name='world'))

    print("Response:", response.message)

4.4 服务器

from concurrent import futures
import grpc
import greeter_pb2
import greeter_pb2_grpc

# 实现服务
class GreeterServicer(greeter_pb2_grpc.GreeterServicer):
    def SayHello(self, request, context):
        return greeter_pb2.HelloReply(message='Hello, ' + request.name)

# 启动服务器
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
greeter_pb2_grpc.add_GreeterServicer_to_server(GreeterServicer(), server)
server.add_insecure_port('[::]:50051')
server.start()
server.wait_for_termination()

更多内容,请访问本站 gRPC 教程

gRPC