今天要來製作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的模板程式囉~
明天,我們就來把最後這一塊程式補上去囉!!