Boule magique 8
Création d'une connexion HTTP2 entre un client Qt gRPC™ et un serveur C++ gRPC.
Magic 8 ball envoie une question à un serveur et affiche la réponse reçue :

Le code de l'exemple comprend les composants suivants :
magic8ballApplication client Qt gRPC qui utilise les fonctions CMake qt_add_protobuf() et qt_add_grpc() pour la génération du code Qt des messages et des services.serverapplication qui appelle le plugin C++ gRPC pour générer du code serveur et mettre en œuvre une logique serveur simple.
Remarque : le plugin C++ gRPC doit être installé. Pour plus de détails, cliquez ici : Prérequis du module
Les deux composants utilisent des messages générés à partir du schéma protobuf décrit dans le fichier exampleservice.proto:
syntax = "proto3";
package qtgrpc.examples;
message AnswerRequest {
string question = 1;
}
message AnswerResponse {
string message = 1;
}
service ExampleService {
rpc answerMethod(AnswerRequest) returns (AnswerResponse) {}
}Le client gRPC est défini comme un objet QML disponible après la compilation du code.
ExampleServiceClient { id: grpcClient channel: grpcChannel.channel }
Le service client se connecte à localhost avec le port 50051, qui est spécifié dans les options du canal gRPC:
GrpcHttp2Channel { id: grpcChannel hostUri: "http://localhost:50051" // Optionally, you can specify custom channel options here // options: GrpcChannelOptions {} }
Et envoie une requête à la partie serveur :
function requestAnswer(question: string): void { ... root.answerReq.question = question; grpcClient.answerMethod(root.answerReq, finishCallback, errorCallback, grpcCallOptions); }
answerMethod est une méthode gRPC que le client appelle. Elle a quatre paramètres : l'objet de la demande, une fonction de rappel de fin, une fonction de rappel d'erreur et un objet GrpcCallOptions.
Cliquez sur le bouton Ask pour envoyer la requête au serveur magic8ball.
Remarque : vous devez exécuter le serveur en parallèle avec l'application client.
L'application server choisit une réponse aléatoire dans la liste des réponses et envoie les données au port du client. Elle vérifie également que la demande contient un champ non vide question. Si le champ est vide, elle renvoie un StatusCode::INVALID_ARGUMENT
grpc::Status answerMethod(grpc::ServerContext *, const AnswerRequest *request, AnswerResponse *response) override { if (request->question().empty()) { std::cerr << "Question is empty" << std::endl; return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, "Question is empty"); } std::cout << "Received question: " << request->question() << std::endl; response->set_message(getRandomAnswer()); return grpc::Status(); };
Après avoir reçu une réponse, l'application cliente affiche la réponse.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.