golang 平滑重启 endless包介绍

goang 重启很简单 ,kill 进程pid ,然后重启,但是可能有以下问题:

1 如果程序准备写入数据库,这时kill程序,导致写入失败,数据不完整,或者中断用户请求。

2 程序重启的短暂时间,无法提供服务

endless 包

endless 包就是解决上面重启产生的问题的,不过只能用在web server,只能在linux上使用

golang 应用需要编译为相同的可以执行文件,新的可执行文件覆盖旧的可执行文件,然后执行kill -1 pid,就会平滑重启了。

整体流程分析

1 启动程序,提供服务 ,监听kill 信号

2 父进程收到kill信号,fork 父进程,复用父进程的listener ,创建子进程,子进程接管新请求。

3 子进程启动后,给父进程发送kill 信号,父进程收到kill信号,开始关闭 父进程的listener ,处理父进程所有已经建立的请求,然后关闭建立的请求,处理完后关闭连接,父进程退出。

使用实例

    r := gin.New()
	r.GET("/", func(c *gin.Context) {
   
		c.String(200, config.Config.Server.AppId)
	})
	s := endless.NewServer(":8000", r)
	err := s.ListenAndServe()
	if err != nil {
   
		log.Printf("server err: %v", err)
	}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值