fix: 修复 server.Multiple 关闭服务器空指针异常

This commit is contained in:
kercylan98
2023-07-03 13:12:22 +08:00
parent 5f8cc1341e
commit 1136af4dd8
3 changed files with 16 additions and 4 deletions
+5 -2
View File
@@ -28,8 +28,10 @@ type MultipleServer struct {
func (slf *MultipleServer) Run() {
var exceptionChannel = make(chan error, 1)
var runtimeExceptionChannel = make(chan error, 1)
defer close(exceptionChannel)
defer close(runtimeExceptionChannel)
defer func() {
close(exceptionChannel)
close(runtimeExceptionChannel)
}()
var running = make([]*Server, 0, len(slf.servers))
for i := 0; i < len(slf.servers); i++ {
go func(address string, server *Server) {
@@ -73,6 +75,7 @@ func (slf *MultipleServer) Run() {
case <-systemSignal:
for len(slf.servers) > 0 {
server := slf.servers[0]
server.multipleRuntimeErrorChan = nil
server.Shutdown(nil)
slf.servers = slf.servers[1:]
}
+7 -2
View File
@@ -120,7 +120,7 @@ func (slf *Server) Run(addr string) error {
for i := 0; i < slf.core; i++ {
slf.messageChannel[i] = make(chan *Message, 4096*1000)
}
if slf.network != NetworkHttp && slf.network != NetworkWebsocket {
if slf.network != NetworkHttp && slf.network != NetworkWebsocket && slf.network != NetworkGRPC {
slf.gServer = &gNet{Server: slf}
}
if callback != nil {
@@ -142,6 +142,7 @@ func (slf *Server) Run(addr string) error {
if err != nil {
return err
}
go connectionInitHandle(nil)
go func() {
slf.isRunning = true
slf.OnStartBeforeEvent()
@@ -208,13 +209,14 @@ func (slf *Server) Run(addr string) error {
slf.isRunning = true
slf.OnStartBeforeEvent()
slf.httpServer.Addr = slf.addr
go connectionInitHandle(nil)
if len(slf.certFile)+len(slf.keyFile) > 0 {
if err := slf.httpServer.ListenAndServeTLS(slf.certFile, slf.keyFile); err != nil {
slf.isRunning = false
slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown)
}
} else {
if err := slf.httpServer.ListenAndServe(); err != nil {
if err := slf.httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
slf.isRunning = false
slf.PushMessage(MessageTypeError, err, MessageErrorActionShutdown)
}
@@ -432,6 +434,9 @@ func (slf *Server) HttpRouter() gin.IRouter {
// PushMessage 向服务器中写入特定类型的消息,需严格遵守消息属性要求
func (slf *Server) PushMessage(messageType MessageType, attrs ...any) {
if slf.messagePool.IsClose() {
return
}
msg := slf.messagePool.Get()
msg.t = messageType
msg.attrs = attrs