ghttp.Server完善重启及停止的终端提示信息

This commit is contained in:
john
2018-09-11 10:32:16 +08:00
parent 8d8c357832
commit a4903f2a6b
4 changed files with 33 additions and 11 deletions

View File

@ -12,6 +12,7 @@ import (
"testing"
"strconv"
"gitee.com/johng/gf/g/encoding/gbinary"
"sync/atomic"
)
var it = NewInt()
@ -25,6 +26,8 @@ var bytes = NewBytes()
var str = NewString()
var inf = NewInterface()
var at = atomic.Value{}
func BenchmarkInt_Set(b *testing.B) {
for i := 0; i < b.N; i++ {
it.Set(i)
@ -193,3 +196,16 @@ func BenchmarkInterface_Val(b *testing.B) {
}
}
func BenchmarkAtomicString_Store(b *testing.B) {
for i := 0; i < b.N; i++ {
at.Store(i)
}
}
func BenchmarkAtomicString_Load(b *testing.B) {
for i := 0; i < b.N; i++ {
at.Load()
}
}

View File

@ -118,7 +118,7 @@ func (s *Server) Restart(newExeFilePath...string) error {
if err := s.checkActionFrequence(); err != nil {
return err
}
return restartWebServers(false, newExeFilePath...)
return restartWebServers("", newExeFilePath...)
}
// 关闭Web Server
@ -131,7 +131,7 @@ func (s *Server) Shutdown() error {
if err := s.checkActionFrequence(); err != nil {
return err
}
shutdownWebServers(false)
shutdownWebServers("")
return nil
}
@ -240,10 +240,10 @@ func bufferToServerFdMap(buffer []byte) map[string]listenerFdMap {
}
// Web Server重启
func restartWebServers(isSignal bool, newExeFilePath...string) error {
func restartWebServers(signal string, newExeFilePath...string) error {
serverProcessStatus.Set(gADMIN_ACTION_RESTARTING)
if runtime.GOOS == "windows" {
if isSignal {
if len(signal) > 0 {
// 在终端信号下,立即执行重启操作
forcedlyCloseWebServers()
forkRestartProcess(newExeFilePath...)
@ -260,21 +260,27 @@ func restartWebServers(isSignal bool, newExeFilePath...string) error {
serverProcessStatus.Set(gADMIN_ACTION_NONE)
return err
} else {
glog.Printfln("%d: server restarting", gproc.Pid())
if len(signal) > 0 {
glog.Printfln("%d: server restarting by signal: %s", gproc.Pid(), signal)
} else {
glog.Printfln("%d: server restarting by web admin", gproc.Pid())
}
}
}
return nil
}
// Web Server关闭服务
func shutdownWebServers(isSignal bool) {
func shutdownWebServers(signal string) {
serverProcessStatus.Set(gADMIN_ACTION_SHUTINGDOWN)
glog.Printfln("%d: server shutting down", gproc.Pid())
if isSignal {
if len(signal) > 0 {
glog.Printfln("%d: server shutting down by signal: %s", gproc.Pid(), signal)
// 在终端信号下,立即执行关闭操作
forcedlyCloseWebServers()
doneChan <- struct{}{}
} else {
glog.Printfln("%d: server shutting down by web admin", gproc.Pid())
// 非终端信号下异步1秒后再执行关闭目的是让接口能够正确返回结果否则接口会报错(因为web server关闭了)
gtime.SetTimeout(time.Second, func() {
forcedlyCloseWebServers()

View File

@ -35,12 +35,12 @@ func handleProcessSignal() {
switch sig {
// 进程终止,停止所有子进程运行
case syscall.SIGINT, syscall.SIGQUIT, syscall.SIGKILL, syscall.SIGHUP, syscall.SIGTERM:
shutdownWebServers(true)
shutdownWebServers(sig.String())
return
// 用户信号,重启服务
case syscall.SIGUSR1:
restartWebServers(true)
restartWebServers(sig.String())
return
default:

View File

@ -6,7 +6,7 @@ import (
func main() {
s := g.Server()
s.EnableAdmin("/admin")
s.EnableAdmin()
//s.BindHookHandler("/admin/*any", ghttp.HOOK_BEFORE_SERVE, func(r *ghttp.Request) {
// if !r.BasicAuth("admin", "123", "") {
// r.Exit()