今天是補班日,一大早我就跟同事大眼瞪小眼,每個人都想說今天不想來公司,反正我們就是可憐的社畜...
昨天我們只剩下監聽模板的部分沒有實作,今天就來將它全部做完,看到我們要傳入request的Client2Servers(),第一個傳入的值是request,第二個回應則是要監聽server回傳的response,並且將response引入到監聽模板中,所以我們就在第二個欄位的地方寫下:
ironManServiceStub.client2Servers(ironManRequest01, new StreamObserver<IronManProto.IronManResponse01>() {
@Override
public void onNext(IronManProto.IronManResponse01 value) {
}
@Override
public void onError(Throwable t) {
}
@Override
public void onCompleted() {
}
}
這個模板是自動填入的,只要選取StreamObserver<>就可以將整個模板引入,其中我們觀察到,第一個onNext()中已經預設好回傳的監聽結果value,因此我們在onNext()中這樣寫:
System.out.println("server回傳的訊息: " + value.getResult());
將回傳的結果值取出,然後在onError()中寫上:
System.out.println("傳遞訊息錯誤");
處理傳遞錯誤的訊息,最後在onCompleted()中寫上:
System.out.println("server回傳結束,並等待後續處理");
這樣我們就完成模板的實作,最後我們要加上一個等待時間,因為非同步並不會等待所有的傳遞結果結束就會直接往下執行,所以要給程式加上一個等待時間,最後再關閉連線。
managedChannel.awaitTermination(10, TimeUnit.SECONDS);
managedChannel.shutdown();
然後我們試著開啟連線看看結果。
首先我們來看看server端收到的訊息:
順利接收到來自Client端的訊息,那我們來看看Client端收到什麼:
我們的Client每隔1秒就收到來自server的訊息,證明我們有成功監聽到server的回傳結果。
這樣我們的Client單發對Server多發就完成囉~