fix: 修复 server 包未使用 KCP 服务器时会有额外的定时器损耗的问题

This commit is contained in:
kercylan98 2023-12-20 12:21:43 +08:00
parent 7e09229330
commit 4d72e8cbcb
3 changed files with 13 additions and 1 deletions

View File

@ -3,6 +3,7 @@ package server
import ( import (
"github.com/kercylan98/minotaur/utils/log" "github.com/kercylan98/minotaur/utils/log"
"github.com/kercylan98/minotaur/utils/network" "github.com/kercylan98/minotaur/utils/network"
"github.com/xtaci/kcp-go/v5"
"math" "math"
"os" "os"
"os/signal" "os/signal"
@ -35,8 +36,12 @@ func (slf *MultipleServer) Run() {
close(runtimeExceptionChannel) close(runtimeExceptionChannel)
}() }()
var wait sync.WaitGroup var wait sync.WaitGroup
var hasKcp bool
for i := 0; i < len(slf.servers); i++ { for i := 0; i < len(slf.servers); i++ {
wait.Add(1) wait.Add(1)
if slf.servers[i].network == NetworkKcp {
hasKcp = true
}
go func(address string, server *Server) { go func(address string, server *Server) {
var lock sync.Mutex var lock sync.Mutex
var startFinish bool var startFinish bool
@ -62,6 +67,9 @@ func (slf *MultipleServer) Run() {
}(slf.addresses[i], slf.servers[i]) }(slf.addresses[i], slf.servers[i])
} }
wait.Wait() wait.Wait()
if !hasKcp {
kcp.SystemTimedSched.Close()
}
log.Info("Server", log.String(serverMultipleMark, "====================================================================")) log.Info("Server", log.String(serverMultipleMark, "===================================================================="))
ip, _ := network.IP() ip, _ := network.IP()

View File

@ -352,6 +352,10 @@ func (slf *Server) Run(addr string) error {
return ErrCanNotSupportNetwork return ErrCanNotSupportNetwork
} }
if slf.multiple == nil && slf.network != NetworkKcp {
kcp.SystemTimedSched.Close()
}
<-messageInitFinish <-messageInitFinish
close(messageInitFinish) close(messageInitFinish)
messageInitFinish = nil messageInitFinish = nil

View File

@ -11,7 +11,7 @@ import (
func TestNew(t *testing.T) { func TestNew(t *testing.T) {
//limiter := rate.NewLimiter(rate.Every(time.Second), 100) //limiter := rate.NewLimiter(rate.Every(time.Second), 100)
srv := server.New(server.NetworkWebsocket, server.WithMessageBufferSize(1024*1024), server.WithPProf()) srv := server.New(server.NetworkWebsocket, server.WithTicker(200, 10, false), server.WithMessageBufferSize(1024*1024), server.WithPProf())
//srv.RegMessageExecBeforeEvent(func(srv *server.Server, message *server.Message) bool { //srv.RegMessageExecBeforeEvent(func(srv *server.Server, message *server.Message) bool {
// t, c := srv.TimeoutContext(time.Second * 5) // t, c := srv.TimeoutContext(time.Second * 5)
// defer c() // defer c()