iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Go gRPC超时控制Deadlines怎么使用
  • 575
分享到

Go gRPC超时控制Deadlines怎么使用

2023-07-02 09:07:28 575人浏览 薄情痞子
摘要

这篇文章主要介绍了Go grpc超时控制Deadlines怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go grpc超时控制Deadlines怎么使用文章都会有所收获,下面我们一起

这篇文章主要介绍了Go grpc超时控制Deadlines怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go grpc超时控制Deadlines怎么使用文章都会有所收获,下面我们一起来看看吧。

    为什么要设置

    当未设置 Deadlines 时,将采用默认的 DEADLINE_EXCEEDED(这个时间非常大)

    如果产生了阻塞等待,就会造成大量正在进行的请求都会被保留,并且所有请求都有可能达到最大超时

    这会使服务面临资源耗尽的风险,例如内存,这会增加服务的延迟,或者在最坏的情况下可能导致整个进程崩溃

    gRPC

    Client

    func main() {    ...ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Duration(5 * time.Second)))defer cancel()client := pb.NewSearchServiceClient(conn)resp, err := client.Search(ctx, &pb.SearchRequest{Request: "gRPC",})if err != nil {statusErr, ok := status.FromError(err)if ok {if statusErr.Code() == codes.DeadlineExceeded {log.Fatalln("client.Search err: deadline")}}log.Fatalf("client.Search err: %v", err)}log.Printf("resp: %s", resp.GetResponse())}
    • context.WithDeadline:会返回最终上下文截止时间。第一个形参为父上下文,第二个形参为调整的截止时间。若父级时间早于子级时间,则以父级时间为准,否则以子级时间为最终截止时间

    func WithDeadline(parent Context, d time.Time) (Context, CancelFunc) {if cur, ok := parent.Deadline(); ok && cur.Before(d) {// The current deadline is already sooner than the new one.return WithCancel(parent)}c := &timerCtx{cancelCtx: newCancelCtx(parent),deadline:  d,}propagateCancel(parent, c)dur := time.Until(d)if dur <= 0 {c.cancel(true, DeadlineExceeded) // deadline has already passedreturn c, func() { c.cancel(true, Canceled) }}c.mu.Lock()defer c.mu.Unlock()if c.err == nil {c.timer = time.AfterFunc(dur, func() {c.cancel(true, DeadlineExceeded)})}return c, func() { c.cancel(true, Canceled) }}

    context.WithTimeout:很常见的另外一个方法,是便捷操作。实际上是对于 WithDeadline 的封装

    func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {return WithDeadline(parent, time.Now().Add(timeout))}

    status.FromError:返回 GRPCStatus 的具体错误码,若为非法,则直接返回 codes.Unknown

    Server

    type SearchService struct{}func (s *SearchService) Search(ctx context.Context, r *pb.SearchRequest) (*pb.SearchResponse, error) {for i := 0; i < 5; i++  {if ctx.Err() == context.Canceled {return nil, status.Errorf(codes.Canceled, "SearchService.Search canceled")}time.Sleep(1 * time.Second)}return &pb.SearchResponse{Response: r.GetRequest() + " Server"}, nil}func main() {...}

    而在 Server 端,由于 Client 已经设置了截止时间。Server 势必要去检测它

    否则如果 Client 已经结束掉了,Server 还傻傻的在那执行,这对资源是一种极大的浪费

    因此在这里需要用 ctx.Err() == context.Canceled 进行判断,为了模拟场景我们加了循环和睡眠 ????

    验证

    重新启动 server.go 和 client.go,得到结果:

    $ go run client.go2018/10/06 17:45:55 client.Search err: deadlineexit status 1

    关于“Go gRPC超时控制Deadlines怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Go gRPC超时控制Deadlines怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

    --结束END--

    本文标题: Go gRPC超时控制Deadlines怎么使用

    本文链接: http://www.lsjlt.com/news/341130.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Go gRPC超时控制Deadlines怎么使用
      这篇文章主要介绍了Go gRPC超时控制Deadlines怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go gRPC超时控制Deadlines怎么使用文章都会有所收获,下面我们一起...
      99+
      2023-07-02
    • GogRPC超时控制Deadlines用法详解
      目录Deadlines为什么要设置gRPCClientServer验证总结Deadlines 今天将介绍 gRPC Deadlines 的用法,这一个必备技巧。内容也比较简单。 De...
      99+
      2024-04-02
    • 怎么实现Go超时控制
      这篇文章给大家分享的是有关怎么实现Go超时控制的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为什么需要超时控制?请求时间过长,用户侧可能已经离开本页面了,服务端还在消耗资源处理,得到的结果没有意义过长时间的服务端...
      99+
      2023-06-14
    • 如何实现Go超时控制
      这篇文章主要介绍如何实现Go超时控制,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!为什么需要超时控制?请求时间过长,用户侧可能已经离开本页面了,服务端还在消耗资源处理,得到的结果没有意义过长时间的服务端处理会占用过多...
      99+
      2023-06-14
    • 怎么在golang中使用GRPC设置client超时时间
      这篇文章给大家介绍怎么在golang中使用GRPC设置client超时时间,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。什么是golanggolang 是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收...
      99+
      2023-06-14
    • Go 协程超时控制的实现
      目录Go 协程超时控制Select 超时控制 go timer 计时器 go context Go 协程超时控制 Select 阻塞方式 Context 方式 先...
      99+
      2024-04-02
    • gRPC的发布订阅模式及REST接口和超时控制
      目录前言发布和订阅模式proto 文件服务端订阅客户端发布客户端REST 接口proto 文件REST 服务gRPC 服务超时控制proto 文件客户端服务端总结前言 上篇文章&nb...
      99+
      2024-04-02
    • Go 中实现超时控制的方案
      前言 日常开发中我们大概率会遇到超时控制的场景,比如一个批量耗时任务、网络请求等;一个良好的超时控制可以有效的避免一些问题(比如 goroutine 泄露、资源不释放等)。 Tim...
      99+
      2024-04-02
    • Go中的gRPC怎么用
      这篇文章主要讲解了“Go中的gRPC怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go中的gRPC怎么用”吧!Go GRPC 入门1,安装包grpcgolang-grpc 包提供了 g...
      99+
      2023-06-29
    • 怎么使用Pygame Time时间控制
      本篇内容主要讲解“怎么使用Pygame Time时间控制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Pygame Time时间控制”吧!pygame.time 时间控制模块,是 Pyg...
      99+
      2023-06-25
    • GO并发控制库Concurrency怎么使用
      这篇文章主要介绍“GO并发控制库Concurrency怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“GO并发控制库Concurrency怎么使用”文章能帮助大家解决问题。Concurrenc...
      99+
      2023-07-04
    • 怎么使用CSS控制超链接文字样式
      这篇文章主要介绍“怎么使用CSS控制超链接文字样式”,在日常操作中,相信很多人在怎么使用CSS控制超链接文字样式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用CSS控...
      99+
      2024-04-02
    • 怎么用CSS控制超链接样式
      本文小编为大家详细介绍“怎么用CSS控制超链接样式”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用CSS控制超链接样式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是超...
      99+
      2024-04-02
    • html怎么用超链接打开新窗口时控制其属性
      这篇文章主要讲解了“html怎么用超链接打开新窗口时控制其属性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“html怎么用超链接打开新窗口时控制其属性”吧!...
      99+
      2024-04-02
    • 掌握Go语言文档中的time.After函数实现超时控制
      掌握Go语言文档中的time.After函数实现超时控制,需要具体代码示例Go语言是一门简单、高效的编程语言,它具备并发编程的能力。在并发编程中,我们经常会遇到需要控制超时的场景,以避免程序永远阻塞。Go语言的标准库中提供了time包,这个...
      99+
      2023-11-04
      关键词:Go语言 超时控制 timeAfter函数
    • 怎么控制腾讯云服务器使用时间
      控制腾讯云服务器使用时间的方法如下: 检查腾讯云服务器的健康状态:确保使用的是正规的服务器,如果服务器出现异常或停机时间过长会导致使用时间下降。 监控服务器的日志:通过查看服务器日志,了解服务器的运行情况。如果发现服务器有异常或停机时间...
      99+
      2023-10-27
      腾讯 服务器 时间
    • 深入了解Golang为什么需要超时控制
      目录1. 简介2. 为什么需要超时控制3. 超时控制的方法 3.1 time包实现超时控制    3.2 context实现超时控制...
      99+
      2023-05-19
      Golang超时控制 Go 超时控制 Golang超时
    • 使用PHP怎么控制循环操作的时间
      这期内容当中小编将会给大家带来有关使用PHP怎么控制循环操作的时间,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。循环执行某个程序,但循环执行过程中,可能会超时导致程序死掉,因此需要限制每个循环操作的最长时...
      99+
      2023-06-15
    • 怎么控制腾讯云服务器使用时间限制呢
      一、配置访问控制 腾讯云服务器需要配置访问控制,以确保只有授权的用户可以访问服务器。在服务器上设置访问控制规则,限制用户的权限,可以有效防止非法访问和数据泄露。访问控制规则可以根据用户的权限和业务需求进行配置,例如只允许授权用户访问和修改...
      99+
      2023-10-27
      腾讯 服务器 时间
    • 怎么控制腾讯云服务器使用时长
      例如,在以下配置中,可以将云服务器的使用时长设定为80小时: https://cloudserver.tencentcloud.com/cloud_stats/stability 这样,当云服务器使用超过预设时长时,控制台将会发送警报...
      99+
      2023-10-27
      腾讯 时长 服务器
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作