gRPC یک سیستم متن باز RPC (Remote Procedure Call) هست که در سال 2015 توسط گوگل توسعه داده شده.در این روش ، برنامه ی کلاینت بطور مستقیم توابع موجود در سرور رو که میتونه روی یه کامپیوتر دیگه قرار گرفته باشه رو فراخونی میکنه که این مسئله کمک میکنه که بتونیم برنامه های توزیع یافته رو ایجاد و مدیریت کنیم.مشابه سیستم های rpc ، این سیستم هم مبتنی بر این ایده کار میکنه که ابتدا ساختار سرویس ها و توابع اونها که بصورت ریموت قابل فراخوانی هستند تعریف میشه .
سپس در سمت سرور ، این واسط (Interface) پیاده سازی میشه و یک سرور gRPC راه اندازی میشه تا درخواست های ارسالی از سمت کلاینت ها رو پردازش کنه .در سمت کلاینت ، ما مفهومی به نام Stub داریم که در برخی زبانها همون کلاینت میشه ، که متدها و سرویس های پیاده سازی شده در سمت سرور رو برای کلاینت ارائه میدن تا امکان فراخونیشن فراهم بشه.
سرور ها و کلاینت های gRPC میتونن در محیط های متفاوت و مختلف از هم با یکدیگر در ارتباط باشن . مثلا شما میتونین سرور رو با زبان سی شارپ پیاده کنین و کلاینت ها از طریق سایر زبان ها مثل جاوا، Go ، JavaScript و ... با سرور در ارتباط باشن
انتخاب تکنولوژی پیاده سازی Api جهت استفاده در سیستم نرم افزاری ، یکی از مهمترین بخش های توسعه سیستم می باشد.gRPC در مقایسه با HTTP API مزیت های مختلفی را ارائه میدهد که در ذیل به بررسی اجمالی اونها میپردازیم
ویژگی | gRPC | Http Apis With JSON |
Contract ( قرارداد) | نیاز به .proto | اختیاری (OpenAPI) |
پروتوکل | HTTP/2 | HTTP |
Payload | Protobuf(کم حجم، باینری) | JSON(حجم بالا، قابل خواندن) |
Prescriptiveness (تجویز) | ||
Streaming | Client، Server ، Bi-Directional | Client,Server |
پشتیبانی از مرورگرها | خیر | بله |
امنیت (Security) | Transport(TLS) | Transport(TLS) |
تولید کد مشتری | بله | OpenAPI + third party tooling |
در gRPC این امکان برای کلاینت فراهم هست تا بتونه مشخص کنه که چه مدت زمانی مایل هست برای پایان یک درخواست rpc منتظر بمونه تا به پایان برسه . deadline به سرور ارسال میشه و سرور میتونه تصمیم بگیره که در صورت گذشتن زمان مربوطه و عدم اتمام کار، چه کاری انجام بده . برای مثال ممکن هست سرور با پایان deadline مربوطه، عملیات های درحال انجام رو کنسل کنه .
در حال حاضر مرورگها بطور کامل از ویژگی های ارائه شده توسط http/2 پشتیبانی نمیکنن . که جهت استفاده از این تکنولوژی بایستی از GRPC-Web که توسط تیم grpc ارائه شده استفاده کنین.همینطور در حال حاضر تمام ویژگی های grpc مثل bi-directional توسط grpc-web پشتیبانی نمیشه .
بدلیل Serialize شدن اطلاعات توسط protobuf و باینری بودن داده های ارسالی ، امکان خواندن اطلاعات مثل اطلاعات json نمی باشد.
بنیانگذار توسینسو و توسعه دهنده
علی شکرالهی، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس موبایل، مهندسی نرم افزار از دانشگاه آزاد اسلامی واحد کرج ، بیش از 15 سال سابقه ی فعالیت های حرفه ای و آموزشی
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود