最近遇到 grpc 客戶端報錯 rpc error: code = Unavailable desc = transport is closing
,原因是連接長時間沒有使用,被服務端斷開,
但是看過grpc源碼的都知道,如果failfast 設置爲false的話,應該會重試的;並且 連接關閉之後grpc.clientConn也會維護這個狀態,所以不應該出現這個問題纔對,
這個是個很奇怪的事情
後來考慮了一下有可能是網絡之間proxy等的問題,因爲長時間不活躍關閉了,但是不通知grpc的client和server端
在 grpc.NewServer(opt...) 的時候加上 以下參數,就是連接長時間不使用,就釋放
驗證完美解決問題
grpc.KeepaliveParams(keepalive.ServerParameters{
MaxConnectionIdle: 5 * time.Minute, //這個連接最大的空閒時間,超過就釋放,解決proxy等到網絡問題(不通知grpc的client和server)
}