如何知道 GRPC 服务器是否可用
How to know if a GRPC server is available
如果 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)
所以现在如果我在服务器之前启动客户端,我会收到 'Waiting for server connect...' 消息按预期向上滚动我的终端 window。然后我启动服务器,它连接......最终。事实上,'Hello you' 消息出现大约需要十秒,这长得惊人。为什么会这么慢,有没有可靠的方法来检查服务器连接?
看看ChannelConnectivity - 我是一名围棋程序员,但在python中应该是一样的。我所做的是创建 while/for 循环,当 "ChannelConnectivity" 设置为 "READY" 我从连接创建客户端,然后继续。
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
函数允许客户端等待指定的超时时间(以秒为单位)让服务器准备就绪。如果我们的客户超时,它会加注。
如果 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)
所以现在如果我在服务器之前启动客户端,我会收到 'Waiting for server connect...' 消息按预期向上滚动我的终端 window。然后我启动服务器,它连接......最终。事实上,'Hello you' 消息出现大约需要十秒,这长得惊人。为什么会这么慢,有没有可靠的方法来检查服务器连接?
看看ChannelConnectivity - 我是一名围棋程序员,但在python中应该是一样的。我所做的是创建 while/for 循环,当 "ChannelConnectivity" 设置为 "READY" 我从连接创建客户端,然后继续。
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
函数允许客户端等待指定的超时时间(以秒为单位)让服务器准备就绪。如果我们的客户超时,它会加注。