废话不多说直接上代码
main.go
func main() {
r := gin.Default()
r.GET("/ping", func(context *gin.Context) {
duration, err:= time.ParseDuration(context.Query("duration"))
if err != nil{
log.Println(err)
return
}
time.Sleep(duration)
context.JSON(200,gin.H{"msg":"Hello world " + strconv.Itoa(os.Getpid())} )
})
endless.ListenAndServe(":8090",r) // 当然也支持https
}
windows下编译 需要设置环境变量为linux否则会报错
编译好后? endlessmain?
在Linux 执行? ./endlessmain &?
查看pid?
修改原来的main文件 friend改成world?重新编译?
覆盖 原来的文件 mv newfile endlessmain
测试:
1.打开新的窗口 请求?curl -i http://localhost:8090/ping?duration=30s
?
2.kill -1 pid? 挂起信号? gin日志? 15503收到信号 创建子进程15522 等待原来的链接结束
3.请求?curl -i http://localhost:8090/ping?duration=2s? 子链接父进程结束 子进程变成父进程
?自此 更新完成? 过程中能看到两个进程均存在的时刻。
参考:https://www.dazhuanlan.com/diqing/topics/1100673
https://blog.csdn.net/bravezhe/article/details/82629901
https://github.com/facebookarchive/grace
|