feat: server.Server 在执行 Shutdown 时将会等待所有消息分发器被释放
This commit is contained in:
parent
e760ef2a0f
commit
4f2850b355
|
@ -191,7 +191,7 @@ func (srv *Server) shutdown(err error) {
|
||||||
|
|
||||||
var infoCount int
|
var infoCount int
|
||||||
for srv.messageCounter.Load() > 0 {
|
for srv.messageCounter.Load() > 0 {
|
||||||
if infoCount%10 == 0 {
|
if infoCount%10 == 0 || infoCount == 0 {
|
||||||
log.Info("Server",
|
log.Info("Server",
|
||||||
log.Any("network", srv.network),
|
log.Any("network", srv.network),
|
||||||
log.String("listen", srv.addr),
|
log.String("listen", srv.addr),
|
||||||
|
@ -202,7 +202,28 @@ func (srv *Server) shutdown(err error) {
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
infoCount++
|
infoCount++
|
||||||
}
|
}
|
||||||
|
dispatcherMgrStopSignal := make(chan struct{})
|
||||||
|
go func(srv *Server, c <-chan struct{}) {
|
||||||
|
var infoCount int
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-c:
|
||||||
|
return
|
||||||
|
case <-time.After(time.Second):
|
||||||
|
if infoCount%10 == 0 || infoCount == 0 {
|
||||||
|
log.Info("Server",
|
||||||
|
log.Any("network", srv.network),
|
||||||
|
log.String("listen", srv.addr),
|
||||||
|
log.String("action", "shutdown"),
|
||||||
|
log.String("state", "waiting"),
|
||||||
|
log.Int64("dispatcher", srv.dispatcherMgr.GetDispatcherNum()))
|
||||||
|
}
|
||||||
|
infoCount++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}(srv, dispatcherMgrStopSignal)
|
||||||
srv.dispatcherMgr.Wait()
|
srv.dispatcherMgr.Wait()
|
||||||
|
close(dispatcherMgrStopSignal)
|
||||||
if srv.multiple == nil {
|
if srv.multiple == nil {
|
||||||
srv.OnStopEvent()
|
srv.OnStopEvent()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue