iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
自我挑戰組

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

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

  • 分享至 

  • xImage
  •  

今天是中秋節,早上還堵在車陣中,下午開始烤肉,準備一路嗨到晚上啦!!

昨天把最後一組傳送的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的樣板程式設計了。

最後我們來看一下執行結果:
https://ithelp.ithome.com.tw/upload/images/20230929/20147417R2BkOyFVLX.png

Server端會先接收到client端的訊息,並且將訊息包裹起來後回傳給Client端。
https://ithelp.ithome.com.tw/upload/images/20230929/20147417GJPuZxdXfT.png

而server端這邊也會將每次收到的訊息都印出,表示有多次收到server端的訊息。
今天我們已經完成四種不同的Client-server的傳遞實作了,明天我們會替大家回顧一下這四種實作的內容。


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

尚未有邦友留言

立即登入留言