4 votes

gRPC C++, client : "14 : échec de la connexion"

Nous exécutons l'exemple "helloworld" à partir de https://grpc.io/docs/quickstart/cpp.html#update-a-grpc-service et nous avons reçu l'ERREUR suivante :

14 : Échec de la connexion

Greeter reçu : RPC a échoué.

Le serveur et le client sont à l'écoute : 0.0.0.0:50051 . Le serveur est en cours d'exécution. D'abord nous recevons juste un paquet sur le serveur et le client se plante, je l'ai vérifié avec tcpdump. Nous avons vérifié sur différents hôtes ainsi que sur le même hôte mais cela ne fonctionne pas dans les deux cas. Devons-nous changer d'IP ou de numéro de port ?

1voto

Wei Yuang Hsu Points 412

J'ai le même problème sur mon PC (OS : ubuntu 16.04 LTS, protobuf 3.4.0).

alors j'ai cherché la raison et j'ai trouvé ceci :

Raison

Si, sur une machine Linux, la variable d'environnement "http_proxy" habituelle est configurée, gRPC en tiendra compte lors de la tentative de connexion, mais ignorera ensuite le paramètre no_proxy correspondant :

Par exemple :

$ env
http_proxy=http://106.1.216.121:8080
no_proxy=localhost,127.0.0.1

$ ./greeter_client
D0306 16:00:11.419586349 1897 combiner.c:351] C:0x25a9290 finish old_state=3
D0306 16:00:11.420527744 1896 tcp_client_posix.c:179] CLIENT_CONNECT: ipv4:106.1.216.121:8080: on_writable: error="No Error"
D0306 16:00:11.420567382 1896 combiner.c:145] C:0x25a69a0 create
D0306 16:00:11.420581887 1896 tcp_client_posix.c:119] CLIENT_CONNECT: ipv4:106.1.216.121:8080: on_alarm: error="Cancelled"
I0306 16:00:11.420617663 1896 http_connect_handshaker.c:319] Connecting to server 127.0.0.1:50051 via HTTP proxy ipv4:106.1.216.121:8080

En gros, il utilise l'url http_proxy pour se connecter alors que localhost est dans la liste no_proxy. Puisque la valeur par défaut de no_proxy inclut localhost sur la plupart des machines linux, le résultat final est que tout utilisateur avec un http_proxy configuré ne sera jamais capable de se connecter à localhost. --- [ 1 ]


Autre solution

Vous pouvez activer le traçage de grpc avec export GRPC_TRACE=all && ./greeter_server et même chose pour le client.

Vérification

Terminal 1 enter image description here Terminal 2 enter image description here

Cela devrait faire l'affaire

ps. pour plus d'informations sur GRPC_TRACE - Variables d'environnement gRPC

Référence

  1. gRPC ne respecte pas la variable d'environnement no_proxy

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X