iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
自我挑戰組

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

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

  • 分享至 

  • xImage
  •  

居然已經到第七天了!! 我居然還能堅持住,真是太感動了@@

今天要來跟大家說明server跟client的用途以及傳輸種類。

在grpc通訊架構中,server端跟client端有各自不同的傳遞方式,大致可以分成以下四種:
1.client單發對server單發
https://ithelp.ithome.com.tw/upload/images/20230912/20147417uWBBXt6W8f.jpg

2.client單發對server stream多發
https://ithelp.ithome.com.tw/upload/images/20230912/20147417PoLBk7JfGd.jpg

3.client stream多發對server單發
https://ithelp.ithome.com.tw/upload/images/20230912/20147417AKuajMiI4n.jpg

4.client stream多發對server stream多發
https://ithelp.ithome.com.tw/upload/images/20230912/201474171XDOVdFtVi.jpg

其中大部分的使用情境以第一種(單發對單發),就是一個request對一個response為主,但是我在工作上使用到的是第三種(client stream多發對server單發)。這次的鐵人賽我會將四種傳遞方式都實作過一次。
在這裡補充一些.proto的撰寫規則,


message IronManRequest02{
  repeated string name = 1; //getNameList()
}

message IronManResponse02{
  string result = 1;
}

如果想要傳遞一個List,需要在型態前面加上repeated,這樣就表示我們要傳遞的是一組List。
那上面提到的傳遞內容單發或者多發的話,我們可以這樣寫

service IronManService{
  rpc IronMan(IronManRequest01) returns (IronManResponse01) {}
  rpc Client2Servers(IronManRequest01) returns (stream IronManResponse01) {}
  rpc Clients2Server(stream IronManRequest01) returns (IronManResponse01) {}
  rpc Clients2Servers(stream IronManRequest01) returns (stream IronManResponse01) {}
}

如果要傳送多個request,那就需要在IronManService中,也就是我們定義的method前面加上stream,例如上面所表示的樣子,表示我們如果調用這個method,他會是一個多值傳遞的端口。這樣我們就完成我們的自定義傳送method了。
我們在設計method的時候,都要先在.proto檔中定義好,然後再使用protobuf的套件幫我們自動生成相對應的method即可。


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

尚未有邦友留言

立即登入留言