本文已使用 Google Cloud Translation API 自动翻译。
某些文档最好以原文阅读。
近年来,gRPC 已成为流行的后端服务通信协议。它是一个高性能、开源的 RPC 框架,可以在任何环境中运行。 gRPC 基于 HTTP/2 协议,并使用 Protocol Buffers 作为其接口定义语言 (IDL)。
gRPC 是后端服务之间通信的绝佳选择,因为它快速、高效且易于使用。在本文中,我们将了解如何使用 gRPC 进行高性能后端通信。我们还将提供一些示例代码片段来帮助您入门。
gRPC 是一个高性能、开源的远程过程调用 (RPC) 框架,可以在任何环境中运行。它基于 HTTP/2 协议,并使用 Protocol Buffers 作为其接口定义语言 (IDL)。
gRPC 专为高性能后端通信而设计。它高效且易于使用。使用 gRPC,您可以更有效地构建数据,还可以利用 HTTP/2 的多路复用和流式传输功能。
使用 gRPC 很简单。首先,您需要安装 gRPC 工具包。您可以在此处找到安装说明:https://grpc.io/docs/quickstart/installation/。
安装 gRPC 工具包后,您可以使用任何编程语言编写代码。 gRPC 支持许多不同的语言,包括 C++、Java、Python 和 Go。
在本文中,我们将使用 Python。我们还将使用 Protocol Buffers IDL 来定义我们的数据结构。
第一步是使用 Protocol Buffers 定义数据结构。 Protocol Buffers 是一种语言中立、平台中立的 IDL,它允许您以人类可读和机器可读的方式定义数据结构。
这是我们可以用来表示用户的数据结构的示例:
message User {
string name = 1;
string email = 2;
int32 age = 3;
}
在这个例子中,我们定义了一个名为 User 的数据结构。该数据结构包含三个字段:姓名、电子邮件和年龄。每个字段旁边的数字是字段的标识符。
一旦定义了数据结构,就需要定义服务。服务是一组相关的 RPC 方法。
在我们的示例中,我们将定义一个名为 UserService 的服务。该服务将有两个方法:GetUser 和 CreateUser。
service UserService {
rpc GetUser (UserRequest) returns (UserResponse);
rpc CreateUser (CreateUserRequest) returns (CreateUserResponse);
}
message UserRequest {
User user = 1;
}
message UserResponse {
User user = 1;
}
message CreateUserRequest {
User user = 1;
}
message CreateUserResponse {
User user = 1;
}
在此示例中,我们定义了 GetUser 和 CreateUser 方法。每个方法都接受一个请求消息并返回一个响应消息。
一旦定义了服务,就需要实施它。在我们的示例中,我们将使用 Python 来实现我们的 UserService。
首先,我们需要从 .proto 文件生成 Python 代码。我们可以使用 protoc 编译器来做到这一点。
protoc -I=. --python_out=. user.proto
这将生成一个名为 user_pb2.py 的 Python 文件。此文件包含我们的 User 和 UserService 类的 Python 代码。
接下来,我们需要为我们的 UserService 编写代码。我们将从定义一个名为 UserService 的类开始:
class UserService(object):
def __init__(self):
self.users = {}
def GetUser(self, user_request, context):
user = self.users.get(user_request.user.id, None)
if user is None:
return user_pb2.UserResponse(error="User not found")
return user_pb2.UserResponse(user=user)
def CreateUser(self, user_request, context):
user = user_request.user
self.users[user.id] = user
return user_pb2.CreateUserResponse(user=user)
在这个例子中,我们为我们的用户定义了一个简单的内存存储。我们还定义了 GetUser 和 CreateUser 方法。这些方法接受请求消息并返回响应消息。
实施服务后,您需要将其提供给客户。最简单的方法是使用 gRPC 服务器。
首先,我们需要创建一个 gRPC 服务器。我们可以使用 grpc-python 库来做到这一点:
import grpc
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
接下来,我们需要将我们的 UserService 添加到服务器:
user_service = UserService()
user_pb2_grpc.add_UserServiceServicer_to_server(
user_service, server)
最后,我们需要启动服务器:
server.add_insecure_port('[::]:50051')
server.start()
server.wait_for_termination()
现在我们的服务已启动并运行,我们可以从客户端调用它。在我们的示例中,我们将使用 Python 客户端。
首先,我们需要为我们的服务生成 Python 代码。我们可以使用 protoc 编译器来做到这一点:
protoc -I=. --python_out=. user.proto
这将生成一个名为 user_pb2.py 的 Python 文件。此文件包含我们的 User 和 UserService 类的 Python 代码。
接下来,我们需要为我们的服务创建一个存根:
channel = grpc.insecure_channel('localhost:50051')
stub = user_pb2_grpc.UserServiceStub(channel)
最后,我们可以调用我们的服务方法:
response = stub.GetUser(user_pb2.UserRequest(user=user))
print(response.user)
response = stub.CreateUser(user_pb2.CreateUserRequest(user=user))
print(response.user)
在本文中,我们研究了如何使用 gRPC 进行高性能后端通信。我们还提供了一些示例代码片段来帮助您入门。