当前位置: 首页 > news >正文

select实现超时保护机制

1、使用channel优雅地关闭服务

package mainimport ("context""fmt""net/http""os""os/signal""syscall""time"
)func IndexHandler(w http.ResponseWriter, r *http.Request) {if r.Method != http.MethodGet {return}_, _ = fmt.Fprintf(w, "测试", "")
}func initRouters() {http.HandleFunc("/", IndexHandler)
}func main() {initRouters()srv := http.Server{Addr: ":8081",}go func() {err := srv.ListenAndServe()if err != nil {return}}()// 优雅地关闭go服务quit := make(chan os.Signal)signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)<-quit // 阻塞// 定时关闭ctx, cancle := context.WithTimeout(context.Background(), 2*time.Second)defer cancle()if err := srv.Shutdown(ctx); err != nil {fmt.Println("Shutdown err:", err)}fmt.Println("Shutdown")
}

2、使用channel实现超时保护机制

package mainimport ("fmt""time"
)// select 可以优雅的处理超时
// 我限制我这个程序运行不可以超过1秒
func timeouting() {timeout := time.After(1 * time.Second) // 如果其它程序运行时间超过1s,那么出发保护机制 <-timeout 的操作ch := make(chan bool)go func() {time.Sleep(time.Second * 2)ch <- true}()select {case <-ch:fmt.Println("程序在1秒内启动")case <-timeout:fmt.Println("程序启动超时,请重新启动")}
}func main() {timeouting()
}

相关文章:

  • 【性能优化】表分桶实践最佳案例
  • odoo17 小变更3 Warning、 “attrs “和 “states “不再用
  • 树和二叉树的定义
  • HBase面试题
  • 端到端的自动驾驶--论坛分析
  • Linux操作系统篇:多线程
  • 【Effective Modern C++】第1章 型别推导
  • 【React篇】父组件渲染时避免重复渲染子组件的3种处理方法
  • [C++][数据结构][跳表]详细讲解
  • SpringCloud微服务框架的原理及应用详解(二)
  • 完胜PSP的神器
  • 人工智能对决:ChatGLM与ChatGPT,探索发展历程
  • 二维数组的知识
  • BGP高级特性
  • 完全背包(模板)
  • Google 是如何开发 Web 框架的
  • 2017-09-12 前端日报
  • CentOS6 编译安装 redis-3.2.3
  • css布局,左右固定中间自适应实现
  • gops —— Go 程序诊断分析工具
  • HTML-表单
  • If…else
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JavaScript 一些 DOM 的知识点
  • LeetCode算法系列_0891_子序列宽度之和
  • python学习笔记 - ThreadLocal
  • webpack+react项目初体验——记录我的webpack环境配置
  • 订阅Forge Viewer所有的事件
  • 读懂package.json -- 依赖管理
  • 简单基于spring的redis配置(单机和集群模式)
  • 聊聊flink的BlobWriter
  • 判断客户端类型,Android,iOS,PC
  • 前端自动化解决方案
  • 如何用vue打造一个移动端音乐播放器
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 交换综合实验一
  • (1)Android开发优化---------UI优化
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (Qt) 默认QtWidget应用包含什么?
  • (八)Flask之app.route装饰器函数的参数
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (转)【Hibernate总结系列】使用举例
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET Reactor简单使用教程
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .NET6 开发一个检查某些状态持续多长时间的类
  • ?.的用法
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [ 蓝桥杯Web真题 ]-布局切换
  • [Algorithm][动态规划][子序列问题][最长递增子序列][摆动序列]详细讲解