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

极致优化WordPress网站速度网站建设维护知识

极致优化WordPress网站速度,网站建设维护知识,网站手机网站制作,芭嘞seo目录 前言 直接关闭的缺陷 平滑关闭的使用场景 例子 思悟项目: golang qq邮件发送验证码——思悟项目技术1 前言 平滑关闭(graceful shutdown)是指在停止服务时,能够让现有的连接、任务或者操作优雅地完成,而不是…

目录

前言

直接关闭的缺陷

平滑关闭的使用场景

例子


思悟项目:

golang qq邮件发送验证码——思悟项目技术1


前言

平滑关闭(graceful shutdown)是指在停止服务时,能够让现有的连接、任务或者操作优雅地完成,而不是直接中断。

平滑关闭的核心思想是在系统接收到停止信号后,不再接收新请求,只处理当前正在执行的请求,确保所有请求完成后,系统才正式关闭。

直接关闭的缺陷

比如说有一个web服务,我们要升级web服务,也就是版本迭代。但是在升级前,要先把服务关闭。我们可以直接包里终止程序,然后启动新的服务,但是这样做存在缺陷:

  • 当前的请求可能会被中断,导致数据丢失。
  • 未完成的后台任务会被强行中断。(用户体验感也会很差)
  • 数据库连接、文件等资源可能没有机会释放,导致潜在的资源泄漏。

平滑关闭的使用场景

  1. 项目版本迭代
  2. 服务重启维护
  3. 服务迁移
  4. 防止数据丢失

(例如王者荣耀更新时,正在打游戏的玩家不会更新,等到这局游戏结束后才会进行更新。)

例子

package mainimport ("context""errors""github.com/gin-gonic/gin""log""net/http""os""os/signal""syscall""time"
)var i = 0func main() {router := gin.Default()// 创建两个接口,一个延迟9秒钟返回信息router.GET("/a", func(c *gin.Context) {time.Sleep(9 * time.Second)i++c.JSON(http.StatusOK, gin.H{"num": i,})})// 一个立刻返回信息router.GET("/b", func(c *gin.Context) {i++c.JSON(http.StatusOK, gin.H{"num": i,})})// 创建一个 http.Serversrv := &http.Server{Addr:    ":8080",Handler: router,}// 在协程中启动服务器go func() {if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {log.Fatalf("listen: %s\n", err)}}()// 创建信号通道,监听 SIGINT 和 SIGTERMquit := make(chan os.Signal, 1)signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)// 阻塞直到收到信号si := <-quitlog.Println("Shutting down server...", si)// shutdown方法需要传入一个上下文参数,有两种写法:// 1.带超时,接收到信号之后,9秒之后无论当前请求是否完成都强制断开ctx, cancel := context.WithTimeout(context.Background(), 9*time.Second)// 2.不带超时,等待当前请求全部完成再断开// ctx, cancel = context.WithCancel(context.Background())defer cancel()// 调用 Shutdown 方法平滑关闭if err := srv.Shutdown(ctx); err != nil {// 当请求还在的时候强制断开了连接将产生错误,err不为空log.Fatal("Server forced to shutdown:", err)}log.Println("Server exiting")
}

步骤具体为:

  1. 捕获信号:使用 os/signal 包捕获终止信号。
  2. 创建 context:创建一个 context,当捕获到信号时触发 context 的取消,从而让正在进行的任务停止接收新的请求。
  3. 调用 Shutdown 方法:http.Server 提供了一个 Shutdown 方法,接受一个 context,它会让服务器停止接收新的请求,等待处理完当前正在进行的请求,等待时间由 context 决定。

参考:Golang 平滑重启之优雅关机

http://www.sczhlp.com/news/142578/

相关文章:

  • 网上商城网站源码营销推广包括什么
  • 定期更新网站小程序开发成本
  • 有了云服务器怎么做网站涉县全员核酸检测
  • 3合一网站一个织梦两个网站
  • 电商网站建设公司wordpress自定义页面分页
  • 上传网站的软件线上推广员是干什么的
  • 网站建设需要哪些技能怎么建设个网站
  • 北京正规网站建设调整推广网站大全
  • 7.WPF 的 TextBox 和 TextBlock 控件 - 实践
  • 网站设计的布局怎样添加网站图标
  • 重庆业务网站建设wordpress删除无分类文章
  • 网站制作温州公司变更名称
  • 可以做软件的网站有哪些内容大庆做网站
  • 文化馆互联网站建设方案织梦手机网站怎么安装教程视频
  • 网站建设需要什么岗位的人php网站开发几技术难点
  • 南京网站开发南京乐识好理财产品网站开发文档
  • 杭州新站整站seo注册网站需要多少钱
  • 有经验的网站建设网站中二级导航栏怎么做
  • 塘沽网站制作wordpress电子商务主题 中文版
  • 英文网站群建设wordpress响应式后台
  • 南头英文网站建设免费ppt模板下载爱ppt
  • 一般去哪个网站做写手网站推广软文选择天天软文
  • 福建省住房与城乡建设厅网站手机wap网站模板
  • 青州网站建设qzfuwu万能搜索引擎
  • 网站图片模板医疗号网站开发
  • 会唐网做网站网站如何收费
  • 省级建设主管部门网站虹口区建设工程管理网站
  • 网站建设 选猴王网络百度推广负责做网站吗
  • 视频网站开发前景如何大连在哪个方向
  • 电子商务网站建设 期末考试试卷以及答案网站地图提交