iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
自我挑戰組

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

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

  • 分享至 

  • xImage
  •  

補班日後的第一個上班日,我覺得我的靈魂要被抽乾了...
(內心OS:假就已經夠少了還要補班,我是不是該考慮移民啊

接下來我們要開始製作client多發對server單發,首先要製作的是server端。
請一樣在.proto中新增一組Clients2Server

service IronManService{
  rpc IronMan01(IronManRequest01) returns (IronManResponse01) {}
  rpc IronMan02(IronManRequest02) returns (IronManResponse02) {}
  rpc Client2Servers(IronManRequest01) returns (stream IronManResponse01) {}
  rpc Clients2Server(stream IronManRequest01) returns (IronManResponse01) {}
}

然後一樣讓protobuf重新整理並生成對應的function,然後在gRPCServer中新增實作Clients2Server這個function。

由於我們這次是由client發送多條訊息給server,因此在server這邊就要使用StreamObserver的樣板程式監聽client端發送過來的request,之後再進行多次的response回傳。
所以我們在override的時候就要直接在return時做出樣板程式:

@Override
public StreamObserver<IronManProto.IronManRequest01> clients2Server(final StreamObserver<IronManProto.IronManResponse01> responseObserver) {
    return new StreamObserver<IronManProto.IronManRequest01>() {
        @Override
        public void onNext(IronManProto.IronManRequest01 value) {

        }

        @Override
        public void onError(Throwable t) {

        }

        @Override
        public void onCompleted() {

        }
    };
}

接下來在onNext()的部分寫上接收值

System.out.println("我收到Client端的Name訊息: " + value.getName());
System.out.println("我收到Client端的Age訊息: " + value.getAge());

首先在onNext這裡,我們一樣是接收來自client端的訊息,然後在onCompleted這邊,然後在onCompleted()中寫上接收到Client端後要回傳的結果

IronManProto.IronManResponse01.Builder builder = IronManProto.IronManResponse01.newBuilder();
builder.setResult("我是server端,我收到全部的訊息,回傳一個response給Client");
IronManProto.IronManResponse01 ironManResponse01 = builder.build();

//將response回傳給client端
responseObserver.onNext(ironManResponse01);
//發送一個傳輸完成的標籤給client
responseObserver.onCompleted();

我們要讓Server回傳response給client,所以我們在這邊設定好要回傳的response訊息,並且將訊息封裝,然後使用responseObserver的onNext()程式將訊息回傳給Client端,最後在傳遞一個onCompleted()的標籤給client端,說明server端的傳遞已經結束。
到這邊為止,我們已經完成server端撰寫,明天我們要來進行client端的實作。


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

尚未有邦友留言

立即登入留言