iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
自我挑戰組

gRPC通訊框架認識與實作系列 第 18

gRPC通訊框架認識與實作【Day 18】

  • 分享至 

  • xImage
  •  

今天是補班日,一大早我就跟同事大眼瞪小眼,每個人都想說今天不想來公司,反正我們就是可憐的社畜...

昨天我們只剩下監聽模板的部分沒有實作,今天就來將它全部做完,看到我們要傳入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端收到的訊息:
https://ithelp.ithome.com.tw/upload/images/20230923/20147417RDRavUNo3n.jpg
順利接收到來自Client端的訊息,那我們來看看Client端收到什麼:
https://ithelp.ithome.com.tw/upload/images/20230923/20147417jIDzPEEeWP.jpg

我們的Client每隔1秒就收到來自server的訊息,證明我們有成功監聽到server的回傳結果。
這樣我們的Client單發對Server多發就完成囉~


上一篇
gRPC通訊框架認識與實作【Day 17】
下一篇
gRPC通訊框架認識與實作【Day 19】
系列文
gRPC通訊框架認識與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言