iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
自我挑戰組

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

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

  • 分享至 

  • xImage
  •  

今天要來製作Client的多發實作,一樣在gRPCclient的資料夾新增一個client05。
首先我們一樣把連線資訊準備好:

//設計好連線資訊
String host = "localhost";
int port = 5000;
//通訊管道建立
ManagedChannel managedChannel = ManagedChannelBuilder.forAddress(host,port).usePlaintext().build();

//判斷是否有連線成功
if (managedChannel != null && !managedChannel.isShutdown())
    System.out.println(" channel build success !! " + host + ":" + port);

接下來我們要來實作client端的多發訊息

IronManServiceGrpc.IronManServiceStub ironManServiceStub = IronManServiceGrpc.newStub(managedChannel);

//TODO 

//設計多次發送訊息給server
for(int i = 0 ; i < 10 ; i++){
    IronManProto.IronManRequest01.Builder builder = IronManProto.IronManRequest01.newBuilder();
    builder.setName("我是第 " + i + " 次的request");
    builder.setAge(String.valueOf(i));
    IronManProto.IronManRequest01 ironManRequest01 = builder.build();

    request01StreamObserver.onNext(ironManRequest01);
    Thread.sleep(1000);
}
request01StreamObserver.onCompleted();
managedChannel.awaitTermination(12, TimeUnit.SECONDS);

我們設計一個for迴圈,讓我們可以每隔一秒鐘就丟出一則request給server端,然後一樣使用onNext()將資料傳出,最後在整個迴圈結束之後,送出一個onCompleted()給server端,告訴server端client端已經把所有的資料都送完了。

再來就結束了嗎?沒這麼簡單,就能找到bug的答案(黃小琥音樂請下),當然不可能就這樣結束了,要知道我們這次使用的可是stream的client,最重要的事情是什麼呢?

一秒鐘
兩秒鐘
三秒鐘

賓果~~就是要讓server端知道我們還沒有把訊息傳完,而當client端把全部的request都送完的時候,要接收一個來自server端的onCompleted()的標籤。
所以我們要在client端這邊設計一個東西來監聽server端給予的標籤,說到監聽當然就是要使用streamObserver的模板程式囉~
明天,我們就來把最後這一塊程式補上去囉!!


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

尚未有邦友留言

立即登入留言