如何知道GRPC服务器是否可用

时间:2017-08-18 14:48:36

标签: python linux grpc

如果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”消息出现之前需要大约十秒钟,这非常长。为什么它可能会这么慢,是否有一种强大的方法来检查服务器连接?

2 个答案:

答案 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函数允许客户端等待指定的超时时间(以秒为单位)以使服务器准备就绪。如果我们的客户超时,就会加薪。