iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
自我挑戰組

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

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

  • 分享至 

  • xImage
  •  

昨天我們在調用gRPC的連線時,提到了一個叫做同步傳輸。
在gRPC中,有兩個傳輸的函式,分別為newBlockingStub()跟newStub(),今天就來說明一下,什麼是同步傳輸/非同步傳輸吧!

  1. 同步(阻塞式)
    當Client端發起一個request,會持續等待server端返回response,在這個等待的過程中,程式會被卡住(亦即阻塞),直到server端發回response或者是發生超時,才會繼續執行程式。
    這種同步傳輸的方式當同時調用多個連線同時進行的話,可能會導致資源浪費。

  2. 非同步(非阻塞式)
    當Client端發起一個request,此時Client並不會等到server端返回response,而是繼續執行下面的程式,這就是非同步傳輸(非阻塞)。
    使用非同步傳輸的話,Client端可以使用回調函式、Future或者是Promise等函式處理接下來的事情。

在了解完同步/非同步之後,我們回到這兩個函式身上。
newBlockingStub()是屬於同步傳輸;而newStub()屬於非同步傳輸。兩個在資料傳輸上是不同的。
昨天我們在建立Client端連線的時候,我們有調用一個IronManServiceGrpc中的newBlockingStub(),表示我們的這個傳輸是採用同步傳輸的方式。程式碼如下:

xxxServiceGrpc.xxxServiceBlockingStub service = xxxServiceGrpc.newBlockingStub(managedChammel);

而另外一種非同步傳輸,我們則會調用另外一個函式newStub(),程式碼如下:

xxxServiceGrpc.xxxServiceStub service = xxxServiceGrpc.newStub(managedChammel);

以上就是兩種不同的傳輸方式,在我們調用gRPC程式的過程中,可能會需要不同的傳輸方式,那我們可以依據實際需求來選擇適合的傳遞方式。


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

尚未有邦友留言

立即登入留言