第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

go 中 gRPC 客戶端流控制如何工作?

go 中 gRPC 客戶端流控制如何工作?

Go
狐的傳說 2023-07-10 15:08:12
我想知道 Go 中的客戶端流 gRPC 服務中的流量控制是如何工作的。stream.SendMsg()具體來說,我有興趣知道何時會調(diào)用客戶端塊中的函數(shù)?根據(jù)文檔:SendMsg() 會阻塞,直到:有足夠的流量控制來調(diào)度 m 的傳輸,或者......那么流的流控機制規(guī)范是怎樣的呢?例如,如果負責從流中讀取消息的服務器端代碼讀取消息的速度不夠快,那么什么時候會調(diào)用 SendMsg() 塊?服務器是否實現(xiàn)了某種反壓機制來告訴客戶端它還沒有準備好接收更多數(shù)據(jù)?與此同時,在反壓信號之前已經(jīng)成功發(fā)送的所有消息都在哪里排隊呢?
查看完整描述

2 回答

?
千萬里不及你

TA貢獻1784條經(jīng)驗 獲得超9個贊

僅當有足夠的流控制窗口時消息才會成功發(fā)送,否則 SendMsg() 將阻塞。

接收端發(fā)出的信號不是增加反壓,而是釋放反壓。這就像說“現(xiàn)在我準備好接收另外 1MB 的消息,發(fā)送它們”。


查看完整回答
反對 回復 2023-07-10
?
慕的地6264312

TA貢獻1817條經(jīng)驗 獲得超6個贊

這是流量控制的另一種解釋

HTTP/2 流量控制是一項防止應用程序被數(shù)據(jù)淹沒的功能。使用流量控制時:

  • 每個 HTTP/2 連接和請求都有一個可用的緩沖區(qū)窗口。緩沖窗口是應用程序一次可以接收多少數(shù)據(jù)。

  • 如果緩沖區(qū)窗口已滿,則流控制將激活。激活后,發(fā)送應用程序將暫停發(fā)送更多數(shù)據(jù)。

  • 一旦接收應用程序處理完數(shù)據(jù),緩沖區(qū)窗口中的空間就可用。發(fā)送應用程序恢復發(fā)送數(shù)據(jù)。

接收大消息時,流量控制可能會對性能產(chǎn)生負面影響。如果緩沖區(qū)窗口小于傳入消息有效負載,或者客戶端和服務器之間存在延遲,則可以以開始/停止突發(fā)的方式發(fā)送數(shù)據(jù)。

流量控制性能問題可以通過增加緩沖區(qū)窗口大小來解決。

  • WithInitialWindowSize客戶端:通過撥號選項WithInitialConnWindowSize設置窗口

// WithInitialWindowSize returns a DialOption which sets the value for initial

// window size on a stream. The lower bound for window size is 64K and any value

// smaller than that will be ignored.

func WithInitialWindowSize(s int32) DialOption {

? ? return newFuncDialOption(func(o *dialOptions) {

? ? ? ? o.copts.InitialWindowSize = s

? ? })

}


// WithInitialConnWindowSize returns a DialOption which sets the value for

// initial window size on a connection. The lower bound for window size is 64K

// and any value smaller than that will be ignored.

func WithInitialConnWindowSize(s int32) DialOption {

? ? return newFuncDialOption(func(o *dialOptions) {

? ? ? ? o.copts.InitialConnWindowSize = s

? ? })

}

InitialWindowSize服務器端:通過服務器選項InitialConnWindowSize設置窗口


// InitialWindowSize returns a ServerOption that sets window size for stream.

// The lower bound for window size is 64K and any value smaller than that will be ignored.

func InitialWindowSize(s int32) ServerOption {

? ? return newFuncServerOption(func(o *serverOptions) {

? ? ? ? o.initialWindowSize = s

? ? })

}


// InitialConnWindowSize returns a ServerOption that sets window size for a connection.

// The lower bound for window size is 64K and any value smaller than that will be ignored.

func InitialConnWindowSize(s int32) ServerOption {

? ? return newFuncServerOption(func(o *serverOptions) {

? ? ? ? o.initialConnWindowSize = s

? ? })

}

建議

  • 如果 gRPC 服務經(jīng)常接收大于 96 KB(Kestrel 的默認流窗口大?。┑南ⅲ瑒t考慮增加連接和流窗口大小。

  • 連接窗口大小應始終等于或大于流窗口大小。流是連接的一部分,發(fā)送者受到兩者的限制。


查看完整回答
反對 回復 2023-07-10
  • 2 回答
  • 0 關注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號