برای استفاده از gRPC در یک برنامه پایتون، پس از تعریف پیامها و سرویسها در فایل .proto
باید کدهای مورد نیاز به زبان پایتون تولید شوند. این مرحله شامل تولید کلاسهای پیام، کدهای سریالسازی، و واسطهای لازم برای کلاینت و سرور gRPC است. ابزار رسمی برای این کار protoc
است که به کمک پلاگینهای gRPC برای پایتون اجرا میشود.
پیشنیازها
قبل از تولید کد، اطمینان حاصل کنید که بستههای زیر نصب شدهاند:
pip install grpcio grpcio-tools
ساختار فایل پروتو
فرض کنید فایل user.proto
به شکل زیر است:
syntax = "proto3";
package user;
message UserRequest {
int32 id = 1;
}
message UserResponse {
int32 id = 1;
string name = 2;
string email = 3;
}
service UserService {
rpc GetUser(UserRequest) returns (UserResponse);
}
دستور تولید کد پایتون
برای تولید کد لازم، از دستور زیر استفاده میکنیم:
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. user.proto
توضیح گزینهها:
-
-I.
مسیر فایلهای.proto
را مشخص میکند (در اینجا دایرکتوری جاری) -
--python_out=.
فایلهای پیام (message classes) را تولید میکند -
--grpc_python_out=.
فایلهای مربوط به gRPC (stubها و سرور) را تولید میکند
نتیجه اجرای دستور بالا
دو فایل ایجاد میشوند:
-
user_pb2.py
حاوی کلاسهای پیام و روشهای serialization/deserialization -
user_pb2_grpc.py
حاوی stubهای کلاینت و کلاس پایه سرور
ساختار فایل user_pb2.py (نمونه)
class UserRequest(proto.Message):
id = proto.Field(proto.INT32, number=1)
class UserResponse(proto.Message):
id = proto.Field(proto.INT32, number=1)
name = proto.Field(proto.STRING, number=2)
email = proto.Field(proto.STRING, number=3)
ساختار فایل user_pb2_grpc.py (نمونه)
class UserServiceStub(object):
def GetUser(self, request, context):
# این متد بهصورت خودکار توسط gRPC پر میشود
pass
class UserServiceServicer(object):
def GetUser(self, request, context):
# پیادهسازی متد سمت سرور
raise NotImplementedError('Method not implemented!')
جدول وظایف فایلهای تولید شده
فایل | وظیفه |
---|---|
*_pb2.py |
تعریف کلاسهای پیام |
*_pb2_grpc.py |
تعریف واسطهای gRPC، Stub و Servicer |
*_pb2_grpc.add_* |
اتصال سرویس به سرور gRPC |
Stub |
رابط کلاینت برای RPC |
Servicer |
کلاس پایه برای پیادهسازی سرور |
فرایند تولید کد از فایل .proto
، پل ارتباطی بین تعریف قراردادی gRPC و پیادهسازی واقعی در زبان مقصد است. در پایتون این فرایند بهطور کامل با protoc
و grpcio-tools
انجام میشود و به توسعهدهندگان امکان میدهد که تمرکز خود را بر پیادهسازی منطق تجاری قرار دهند بدون نگرانی از جزئیات انتقال داده.