做完兩種Client單發對上Server多發的實作後,今天就來比較一下,兩個不同的client端有什麼不同。
Client03 | Client04 | |
---|---|---|
建立連線使用函數 | newBlockingStub() | newStub() |
連線方式 | 同步(阻塞) | 非同步(非阻塞) |
接收數據方式 | 使用迭代器 | 使用StreamObserve樣板程式 |
在兩個不同的連線方式中,最根本的差異就是使用同步以及非同步的連線方式。
在client03中使用的是同步的連線方式,他會等待server端將全部的資料都傳送過來之後,才會關閉連線,因此我們在接收資料的時候會使用迭代器來接收資料;但在client04中,因為我們採用的是非同步的連線方式,我們要讓client端保持監聽的狀態,所以使用StreamObserver的樣板程式,並且使用awaitTermination()讓client等待我們所指定的時間,這樣可以更好的讓我們掌握client關閉的時機,避免資源的浪費。
總結主要差異在於同步連線方式會阻塞呼叫stream,而非同步連線方式允許在等待回應時繼續執行其他操作。選擇哪種連線方式取決於應用程式的需求和效能要求。對於簡單的request-response情境,同步方式可能較容易理解和管理,但對於需要處理併發請求和stream的情境,非同步方式則更適合,因為它可以提高效能和回應時間。