簡體   English   中英

gRPC(Java) - 在“服務器流”情況下,如何檢查客戶端是否已連接以接收服務器消息?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM