diff --git a/TODO b/TODO index d2e58590a..a1ee9dcca 100644 --- a/TODO +++ b/TODO @@ -11,7 +11,7 @@ Cookie&Session数据池化处理; ghttp.Client增加proxy特性; gtime增加对时区转换的封装,并简化失去转换时对类似+80500时区的支持; 改进gf-orm的where查询功能,参考thinkphp 里的where查询语法; - +改进ghttp.Server平滑重启机制,当新进程接管服务后,再使用进程间通信方式通知父进程销毁; DONE: diff --git a/g/net/ghttp/ghttp_server_admin.go b/g/net/ghttp/ghttp_server_admin.go index 95610013d..48f6fa95c 100644 --- a/g/net/ghttp/ghttp_server_admin.go +++ b/g/net/ghttp/ghttp_server_admin.go @@ -240,8 +240,11 @@ func restartWebServers(newExeFilePath...string) { }) } else { forkReloadProcess(newExeFilePath...) - go gracefulShutdownWebServers() - doneChan <- struct{}{} + // 异步2秒后再执行关闭,目的是让新进程将服务成功接管后,再关闭自身进程(后续可以根据进程间通信来改进) + gtime.SetTimeout(2*time.Second, func() { + go gracefulShutdownWebServers() + doneChan <- struct{}{} + }) } }