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 教程。