昨天我們做完了server多發的部分,今天要把Client端給做起來,請一樣在client的資料夾中新增一個client03,並且寫上:
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.IronManServiceBlockingStub ironManServiceBlockingStub = IronManServiceGrpc.newBlockingStub(managedChannel);
//TODO
}
前面的部分一樣是要透過連線設定以及確認是否有連線成功,然後使用同步函數newBlockingStub()進行連線,緊接著要給予的是製作request的部分:
//準備request並封裝
IronManProto.IronManRequest01.Builder builder = IronManProto.IronManRequest01.newBuilder();
builder.setName("Amy");
builder.setAge("28");
IronManProto.IronManRequest01 ironManRequest01 = builder.build();
//使用迭代器接收資料
Iterator<IronManProto.IronManResponse01> ironManResponse01Iterator = ironManServiceBlockingStub.client2Servers(ironManRequest01);
while(ironManResponse01Iterator.hasNext()){
IronManProto.IronManResponse01 ironManResponse01 = ironManResponse01Iterator.next();
System.out.println("我是收到的response: " + ironManResponse01.getResult());
}
//關閉連線
managedChannel.shutdown();
注意接收response的部分,我們接收多個來自server的內容,因此我們先定義好要接收的資料型態,在這邊使用迭代器來接收資料。
這樣一來,我們就完成了發送一組request後,可以獲得多組response的server-client端組合了。
接下來,我們啟動server跟client端實際運作看看吧!
先啟動server端預備,再使用client端發送request,首先server會先收到request:
當server接收到一組request後,server便開始執行迴圈,發送多個response給client端:
client端會以每秒一個response的方式接收到server傳過來的資料,當收到資料時我們就完成整個client對server多發的實作了。