![](/img/trans.png)
[英]While doing gRPC client-side streaming, how server will behave when it does not receive all of requests
[英]gRPC(Java) - How to check if client is connected to receive server messages in case of "Server Streaming" cases?
我是 gRPC 的新手,並試圖理解這些概念。 我正在考慮Mark Roth的答案,但我仍然無法理解為什么架構不允許我們檢查 stream 是否打開。 假設,我有一個雙向 rpc,例如:
StreamObserver<ClientMessage> client = stub.biDirectionalRpc(new StreamObserver<ServerMessage>(){
@Override
public void onNext(ServerMessage serverMessage) {
...
}
@Override
public void onError(Throwable throwable) {
client = null; // Connection might already be established again by
// the time this statement is reached. (`client` guarded by mutex)
...
}
@Override
public void onCompleted() {
...
}
});
請幫助我了解客戶端如何檢查它是否真的能夠從服務器獲取消息。 依賴“onError”是沒有問題的,因為它會導致競爭條件,同時保持此連接的狀態。
您可以通過在 stream 上接收消息來了解 RPC 是否已建立。 但是沒有辦法避免 RPC 在啟動后失敗。
即使有一種方法可以檢查 RPC 是否正常工作,但在使用結果時,這些信息可能已經過時了。 if (isRpcWorking()) doSomething()
; 這兩種方法之間存在競爭,互斥鎖不能阻止網絡失敗。 當您發送消息時,網絡甚至可以運行,但是在該消息的電子/光子在客戶端和服務器之間傳輸所需的時間時它會失敗。 你必須接受失敗是激烈的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.