如果gRPC客户端在服务器之前启动,则会以异常退出。我正在开发的应用程序同时启动了一堆服务器和客户端(接近),并且我必须在执行顺序方面保持健壮。如果客户端在服务器之前启动,我希望它等到服务器出现。
我修改了HelloWorld python客户端示例,如下所示:
done = False
while not done:
try:
response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), timeout=1)
print("Greeter client received: " + response.message)
done = True
except:
print('Waiting for server connect...')
time.sleep(1)
所以现在如果我在服务器之前启动客户端,我会得到'等待服务器连接...'消息按预期滚动我的终端窗口。然后我启动服务器,最终连接......实际上,在“Hello you”消息出现之前需要大约十秒钟,这非常长。为什么它可能会这么慢,是否有一种强大的方法来检查服务器连接?
答案 0 :(得分:4)
看看ChannelConnectivity - 我是一名程序员,但在python中应该是一样的。我所做的是创建while / for循环,当“ChannelConnectivity”设置为“READY”时,我从连接创建客户端然后继续。
答案 1 :(得分:1)
import grpc
TIMEOUT_SEC = 15
def grpc_server_on(channel) -> bool:
try:
grpc.channel_ready_future(channel).result(timeout=TIMEOUT_SEC)
return True
except grpc.FutureTimeoutError:
return False
channel_ready_future
函数允许客户端等待指定的超时时间(以秒为单位)以使服务器准备就绪。如果我们的客户超时,就会加薪。