gRPC لـ Kotlin: المكتبات، الخادم والعميل - أمثلة برمجية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

gRPC لـ Kotlin: المكتبات والأمثلة



gRPC هو إطار عمل عالي الأداء للاستدعاء الإجرائي عن بُعد (RPC)، طورته Google. يستخدم Protocol Buffers (protobuf) لتسلسل البيانات و HTTP/2 للنقل. في نظام Kotlin البيئي، يتكامل gRPC بشكل ممتاز مع coroutines، مما يجعله خيارًا مثاليًا لبناء الخدمات المصغرة غير المتزامنة.



في هذه المقالة، سنشرح كيفية إعداد خادم وعميل gRPC على Kotlin باستخدام المكتبة الرسمية gRPC-Kotlin (grpc-kotlin). ستشاهد الدورة الكاملة: من وصف ملف proto إلى التشغيل والاختبار.



1. المكتبات الأساسية



للعمل مع gRPC في Kotlin، تُستخدم المكونات الرئيسية التالية:



  • protobuf-gradle-plugin — إضافة لترجمة ملفات .proto إلى فئات Kotlin/Java.
  • grpc-kotlin-stub — مكتبة تُنشئ stubs خاصة بـ Kotlin coroutine (دوال suspend).
  • grpc-netty-shaded — طبقة نقل تعتمد على Netty (HTTP/2 مدمج).
  • grpc-protobuf-lite — نسخة خفيفة من protobuf لنظام Android/العملاء.


2. هيكل المشروع



سنستخدم Gradle (Kotlin DSL). أنشئ مشروعًا بالهيكل التالي:



my-grpc-app/├── build.gradle.kts├── settings.gradle.kts└── src/    ├── main/    │   ├── proto/    │   │   └── hello.proto    │   └── kotlin/    │       ├── server/    │       │   └── HelloServer.kt    │       └── client/    │           └── HelloClient.kt


3. وصف ملف proto



أنشئ ملف hello.proto في src/main/proto/:



syntax = "proto3";

package com.example.grpc;

service Greeter { rpc SayHello (HelloRequest) returns (HelloReply);}

message HelloRequest { string name = 1;}

message HelloReply { string message = 1;}


4. إعداد Gradle (build.gradle.kts)



أضف الإضافات والتبعيات اللازمة:



plugins {    id("org.jetbrains.kotlin.jvm") version "1.9.22"    id("com.google.protobuf") version "0.9.4"}

repositories { mavenCentral()}

dependencies { implementation("io.grpc:grpc-kotlin-stub:1.4.1") implementation("io.grpc:grpc-netty-shaded:1.60.0") implementation("io.grpc:grpc-protobuf-lite:1.60.0")}

protobuf { protoc { artifact = "com.google.protobuf:protoc:3.25.1" } plugins { create("grpc") { artifact = "io.grpc:protoc-gen-grpc-java:1.60.0" } create("grpckt") { artifact = "io.grpc:protoc-gen-grpc-kotlin:1.4.1:jdk8@jar" } } generateProtoTasks { all().forEach { task -> task.plugins { create("grpc") { } create("grpckt") { } } } }}


5. تنفيذ خادم gRPC



أنشئ ملف HelloServer.kt:



package com.example.server

import com.example.grpc.GreeterGrpcKtimport com.example.grpc.HelloReplyimport com.example.grpc.HelloRequestimport io.grpc.ServerBuilder

class GreeterService : GreeterGrpcKt.GreeterCoroutineImplBase() { override suspend fun sayHello(request: HelloRequest): HelloReply { println("تم استلام طلب من: ${request.name}") return HelloReply.newBuilder() .setMessage("مرحبًا، ${request.name}!") .build() }}

fun main() { val port = 50051 val server = ServerBuilder.forPort(port) .addService(GreeterService()) .build() .start()

println("خادم gRPC يعمل على المنفذ $port") server.awaitTermination()}


6. تنفيذ عميل gRPC



أنشئ ملف HelloClient.kt:



package com.example.client

import com

توصيات