我们正在运行来自https://grpc.io/docs/quickstart/cpp.html#update-a-grpc-service的“helloworld”示例,我们收到了以下错误:
14:连接失败
Greeter收到:RPC失败。
服务器和客户端正在监听:0.0.0.0:50051
。服务器正在运行。
首先,我们只收到服务器上的数据包,客户端崩溃,我用tcpdump检查了它。我们检查了不同的主机以及同一主机,但它不适用于任何一种情况。
我们应该更改不同的IP或不同的端口号吗?
答案 0 :(得分:1)
我在PC上遇到了同样的问题(操作系统:ubuntu 16.04 LTS,protobuf 3.4.0)
所以我搜索原因并找到了:
如果在linux机器上,环境配置了通常的“http_proxy”环境变量,gRPC会在尝试连接时考虑到这一点,但是,然后会继续忽略配套的no_proxy设置:
例如:
$ 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
基本上,即使localhost位于no_proxy列表中,它也使用http_proxy url进行连接。由于no_proxy的默认值包括大多数linux机器上的localhost;最终结果是,配置了http_proxy的任何用户将永远无法连接到localhost。 --- [1]
您可以使用启用grpc跟踪
export GRPC_TRACE=all && ./greeter_server
和客户一样。
应该做的伎俩
PS。有关GRPC_TRACE - gRPC environment variables
的更多信息