Go gRPC超时控制Deadlines怎么使用
导读:本文共1952字符,通常情况下阅读需要7分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 为什么要设置当未设置 Deadlines 时,将采用默认的 DEADLINE_EXCEEDED(这个时间非常大)如果产生了阻塞等待,就会造成大量正在进行的请求都会被保留,并且所有请求都有可能达到最大超时这会使服务面临资源耗尽的风险,例如内存,这会增加服务的延迟,或者在最坏的情况下可能导致整个进程崩溃gRPCClientfuncmain(){... ct... ...
目录
(为您整理了一些要点),点击可以直达。当未设置 Deadlines 时,将采用默认的 DEADLINE_EXCEEDED(这个时间非常大)
如果产生了阻塞等待,就会造成大量正在进行的请求都会被保留,并且所有请求都有可能达到最大超时
这会使服务面临资源耗尽的风险,例如内存,这会增加服务的延迟,或者在最坏的情况下可能导致整个进程崩溃
context.WithDeadline:会返回最终上下文截止时间。第一个形参为父上下文,第二个形参为调整的截止时间。若父级时间早于子级时间,则以父级时间为准,否则以子级时间为最终截止时间
context.WithTimeout:很常见的另外一个方法,是便捷操作。实际上是对于 WithDeadline 的封装
status.FromError:返回 GRPCStatus 的具体错误码,若为非法,则直接返回 codes.Unknown
而在 Server 端,由于 Client 已经设置了截止时间。Server 势必要去检测它
否则如果 Client 已经结束掉了,Server 还傻傻的在那执行,这对资源是一种极大的浪费
因此在这里需要用 ctx.Err() == context.Canceled 进行判断,为了模拟场景我们加了循环和睡眠 ????
重新启动 server.go 和 client.go,得到结果:
Go gRPC超时控制Deadlines怎么使用的详细内容,希望对您有所帮助,信息来源于网络。