gRPC pour Kotlin : bibliothèques et exemples d'utilisation

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

gRPC pour Kotlin : bibliothèques et exemples d'utilisation

\n\n

gRPC est un framework haute performance pour l'appel de procédure à distance (RPC), développé par Google. Il utilise Protocol Buffers (protobuf) pour la sérialisation des données et HTTP/2 pour le transport. Dans l'écosystème Kotlin, gRPC s'intègre particulièrement bien grâce à des bibliothèques prenant en charge les coroutines et le typage strict. Dans cet article, nous examinerons les outils principaux nécessaires pour travailler avec gRPC en Kotlin et fournirons des exemples fonctionnels de serveur et de client.

\n\n

Bibliothèques principales

\n\n

Pour travailler avec gRPC en Kotlin, la pile suivante est nécessaire :

\n\n
    \n
  • grpc-kotlin — la bibliothèque officielle de Google, fournissant des API spécifiques à Kotlin, incluant le support des coroutines (fonctions suspend, Flow).
  • \n
  • protobuf-java et protobuf-gradle-plugin — pour la génération de classes à partir de fichiers .proto.
  • \n
  • grpc-netty ou grpc-okhttp — la couche de transport (Netty pour le serveur, OkHttp pour Android/client).
  • \n
  • javax.annotation-api — souvent nécessaire pour une compilation correcte du code généré.
  • \n
\n\n

Pour la gestion des dépendances, utilisez Gradle (Kotlin DSL). Exemple de bloc 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

Assurez-vous également d'ajouter le plugin protobuf pour la génération de code :

\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

Définition du service via un fichier .proto

\n\n

Créez le fichier 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

Après avoir exécuté la construction Gradle, les classes suivantes seront générées : HelloRequest, HelloReply, GreeterGrpc et GreeterGrpcKt (version Kotlin avec coroutines).

\n\n

Implémentation du serveur gRPC en Kotlin

\n\n

Le serveur utilisera la classe générée 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 = "Bonjour, ${request.name}!"\n        println("Requête reçue : ${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("Serveur démarré sur le port $port")\n    server.awaitTermination()\n}
\n\n

Implémentation du client gRPC en Kotlin

\n\n

Le client utilise un canal et un stub avec support des coroutines :

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

Recommendations