2017-08-18 68 views
0

如果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'消息之前大約需要十秒鐘,這非常長。爲什麼它會這麼慢,並且有沒有一種強大的方法來檢查服務器連接?

回答

4

看看ChannelConnectivity - 我是一個去程序員,但它應該是相同的蟒蛇。我所做的是創建while/for循環,當「ChannelConnectivity」設置爲「READY」時,我從連接創建客戶端,然後繼續。

+0

請注意,「WaitForReady」RPC通常應該首選手動觀察連接狀態。我還沒有在Python中找到該API。 –

相關問題