今天是中秋節,早上還堵在車陣中,下午開始烤肉,準備一路嗨到晚上啦!!
昨天把最後一組傳送的Server端做完,今天要來看Client端的實作,其實到這邊已經跟前面很多的內容差不多了。
一樣是先新增我們的client06,然後寫上:
public static void main(String[] args) {
//設計好連線資訊
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);
IronManServiceGrpc.IronManServiceStub ironManServiceStub = IronManServiceGrpc.newStub(managedChannel);
//TODO
StreamObserver<IronManProto.IronManRequest01> request01StreamObserver = ironManServiceStub.clients2Servers()
//設計多次發送訊息給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(15, TimeUnit.SECONDS);
managedChannel.shutdown();
}
先定義好我們要做出多次傳送的client樣式,一樣是透過迴圈多次傳訊資料給server端,
然後中間我們一樣加上streamObserver樣板程式,透過樣板程式監聽來自server的訊息,所以變成這樣:
streamObserver<IronManProto.IronManRequest01> request01StreamObserver = ironManServiceStub.clients2Servers(new StreamObserver<IronManProto.IronManResponse01>() {
@Override
public void onNext(IronManProto.IronManResponse01 value) {
System.out.println("從server回傳的結果: " + value.getResult());
}
@Override
public void onError(Throwable t) {
}
@Override
public void onCompleted() {
System.out.println("回傳全部結束");
}
});
這樣我們就完成streamObserver的樣板程式設計了。
最後我們來看一下執行結果:
Server端會先接收到client端的訊息,並且將訊息包裹起來後回傳給Client端。
而server端這邊也會將每次收到的訊息都印出,表示有多次收到server端的訊息。
今天我們已經完成四種不同的Client-server的傳遞實作了,明天我們會替大家回顧一下這四種實作的內容。