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

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

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

ابدأ الدورة

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

\n\n

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

\n\n

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

\n\n

للعمل مع gRPC في Kotlin، ستحتاج إلى المجموعة التالية:

\n\n
    \n
  • grpc-kotlin — المكتبة الرسمية من Google، التي توفر واجهات برمجة تطبيقات خاصة بـ Kotlin، بما في ذلك دعم coroutines (وظائف suspend، Flow).
  • \n
  • protobuf-java و protobuf-gradle-plugin — لتوليد الفئات من ملفات .proto.
  • \n
  • grpc-netty أو grpc-okhttp — طبقة النقل (Netty للخادم، OkHttp لنظام Android/العميل).
  • \n
  • javax.annotation-api — غالبًا ما يكون مطلوبًا لتجميع الكود المولد بشكل صحيح.
  • \n
\n\n

لإدارة التبعيات، استخدم Gradle (Kotlin DSL). مثال على كتلة dependencies:

\n\n
dependencies {\n    implementation("io.grpc:grpc-netty-shaded:1.58.0")\n    implementation("io.grpc:grpc-protobuf:1.58.0")\n    implementation("io.grpc:grpc-stub:1.58.0")\n    implementation("io.grpc:grpc-kotlin-stub:1.4.0")\n    implementation("com.google.protobuf:protobuf-java:3.24.3")\n    implementation("javax.annotation:javax.annotation-api:1.3.2")\n}
\n\n

أيضًا، تأكد من إضافة إضافة protobuf لتوليد الكود:

\n\n
plugins {\n    id("com.google.protobuf") version "0.9.4"\n}\n\nprotobuf {\n    protoc {\n        artifact = "com.google.protobuf:protoc:3.24.3"\n    }\n    plugins {\n        create("grpc") {\n            artifact = "io.grpc:protoc-gen-grpc-java:1.58.0"\n        }\n        create("grpckt") {\n            artifact = "io.grpc:protoc-gen-grpc-kotlin:1.4.0:jdk8@jar"\n        }\n    }\n    generateProtoTasks {\n        all().forEach {\n            it.plugins {\n                create("grpc")\n                create("grpckt")\n            }\n        }\n    }\n}
\n\n

تعريف الخدمة عبر ملف .proto

\n\n

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

\n\n
syntax = "proto3";\n\npackage com.example.grpc;\n\nservice Greeter {\n  rpc SayHello (HelloRequest) returns (HelloReply);\n}\n\nmessage HelloRequest {\n  string name = 1;\n}\n\nmessage HelloReply {\n  string message = 1;\n}
\n\n

بعد تشغيل بناء Gradle، سيتم توليد الفئات: HelloRequest، HelloReply، GreeterGrpc و GreeterGrpcKt (إصدار Kotlin مع coroutines).

\n\n

تنفيذ خادم gRPC في Kotlin

\n\n

سيستخدم الخادم الفئة المولدة GreeterGrpcKt.GreeterCoroutineImplBase:

\n\n
import com.example.grpc.GreeterGrpcKt\nimport com.example.grpc.HelloReply\nimport com.example.grpc.HelloRequest\nimport io.grpc.ServerBuilder\nimport kotlinx.coroutines.runBlocking\n\nclass GreeterService : GreeterGrpcKt.GreeterCoroutineImplBase() {\n    override suspend fun sayHello(request: HelloRequest): HelloReply {\n        val message = "مرحبًا، ${request.name}!"\n        println("تم استلام الطلب: ${request.name}")\n        return HelloReply.newBuilder().setMessage(message).build()\n    }\n}\n\nfun main() {\n    val port = 50051\n    val server = ServerBuilder.forPort(port)\n        .addService(GreeterService())\n        .build()\n\n    server.start()\n    println("تم تشغيل الخادم على المنفذ $port")\n    server.awaitTermination()\n}
\n\n

تنفيذ عميل gRPC في Kotlin

\n\n

يستخدم العميل قناة و stub مع دعم coroutines:

\n\n
import com.example.grpc.GreeterGrpcKt\ni                    

توصيات