8.16grpc的简单总结|青训营

138 阅读3分钟

grpc是什么

gRPC(gRPC Remote Procedure Call)是一个开源的高性能远程过程调用(RPC)框架,由Google开发并开源。它基于HTTP/2协议,使用Protocol Buffers(protobuf)作为数据序列化和接口定义语言(IDL)。以下是对gRPC的简单总结:

  1. 远程过程调用(RPC) :gRPC允许不同系统、语言和平台之间的应用程序进行通信,就像调用本地函数一样。这样可以使得分布式系统的开发更加简单,开发人员可以将注意力集中在业务逻辑上,而不必过多关注网络通信细节。

  2. HTTP/2协议:gRPC基于HTTP/2协议,这是一种优化了性能的协议,支持多路复用、头部压缩、流控制等特性,可以减少网络延迟并提高传输效率。

  3. IDL和Protocol Buffers:gRPC使用IDL来定义服务接口和消息格式。它使用Google开发的Protocol Buffers作为默认的数据序列化和反序列化机制,这种二进制格式比JSON等文本格式更紧凑,更高效。

  4. 多种语言支持:gRPC支持多种编程语言,包括但不限于C++, Java, Python, Go, C#, Node.js等。这使得不同团队可以使用自己擅长的语言进行开发,并通过gRPC进行跨语言的通信。

  5. 四种服务类型:gRPC定义了四种不同类型的服务,以满足不同的通信需求:

    • Unary RPC:一对一的请求和响应。
    • Server Streaming RPC:客户端发起请求,服务器以流式响应多条消息。
    • Client Streaming RPC:客户端以流式发送多条消息,服务器返回单个响应。
    • Bidirectional Streaming RPC:双方都可以以流式方式发送多条消息,响应也是以流式返回。
  6. 安全性:gRPC提供了基于TLS/SSL的安全通信,并支持认证和授权机制,确保通信的保密性和完整性。

  7. 拦截器:gRPC允许开发人员在请求和响应的传递过程中插入拦截器,以实现例如认证、日志记录等功能。

  8. 生态系统:gRPC拥有丰富的生态系统,包括监控、负载均衡、错误处理等工具和库,以帮助开发人员构建稳定、可靠的分布式系统。

安装与使用步骤

1. 安装 gRPC 工具和库:

首先,你需要安装 gRPC 的工具和库。使用以下命令安装 gRPC 和 Protocol Buffers 相关的工具和 Python 库:

pip install grpcio grpcio-tools

2. 定义服务和消息:

在 gRPC 中,你需要使用 Protocol Buffers 定义你的服务接口和消息结构。创建一个 .proto 文件,定义你的服务和消息,类似于以下示例:


service MyService {
  rpc MyMethod (MyRequest) returns (MyResponse);
}

message MyRequest {
  string request_field = 1;
}

message MyResponse {
  string response_field = 1;
}

3. 生成代码:

使用 Protocol Buffers 工具生成对应的代码。运行以下命令生成 Python 代码:

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

4. 实现服务逻辑:

在生成的 _pb2_grpc.py 文件中,你可以找到生成的服务类。在该类中,实现你的服务逻辑。例如:

import your_service_pb2
import your_service_pb2_grpc

class MyServiceServicer(your_service_pb2_grpc.MyServiceServicer):
    def MyMethod(self, request, context):
        response = your_service_pb2.MyResponse()
        response.response_field = "Hello, " + request.request_field
        return response

server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
your_service_pb2_grpc.add_MyServiceServicer_to_server(MyServiceServicer(), server)
server.add_insecure_port('[::]:50051')
server.start()

try:
    while True:
        time.sleep(86400)
except KeyboardInterrupt:
    server.stop(0)

5. 运行服务器和客户端:

运行你的服务器和客户端代码。你可以使用 gRPC 的客户端来调用你的服务方法。