多核逻辑优化
This commit is contained in:
parent
2b50df79e9
commit
84057605b2
|
@ -69,7 +69,7 @@ type Server struct {
|
||||||
gServer *gNet // TCP或UDP模式下的服务器
|
gServer *gNet // TCP或UDP模式下的服务器
|
||||||
messagePool *synchronization.Pool[*message] // 消息池
|
messagePool *synchronization.Pool[*message] // 消息池
|
||||||
messagePoolSize int // 消息池大小
|
messagePoolSize int // 消息池大小
|
||||||
messageChannel chan *message // 消息管道
|
messageChannel map[int]chan *message // 消息管道
|
||||||
initMessageChannel bool // 消息管道是否已经初始化
|
initMessageChannel bool // 消息管道是否已经初始化
|
||||||
multiple bool // 是否为多服务器模式下运行
|
multiple bool // 是否为多服务器模式下运行
|
||||||
prod bool // 是否为生产模式
|
prod bool // 是否为生产模式
|
||||||
|
@ -111,16 +111,20 @@ func (slf *Server) Run(addr string) error {
|
||||||
data.attrs = nil
|
data.attrs = nil
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
slf.messageChannel = make(chan *message, 4096*1000)
|
slf.messageChannel = map[int]chan *message{}
|
||||||
|
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.gServer = &gNet{Server: slf}
|
slf.gServer = &gNet{Server: slf}
|
||||||
}
|
}
|
||||||
if callback != nil {
|
if callback != nil {
|
||||||
go callback()
|
go callback()
|
||||||
}
|
}
|
||||||
for i := 0; i < slf.core; i++ {
|
for _, messageChannel := range slf.messageChannel {
|
||||||
|
messageChannel := messageChannel
|
||||||
go func() {
|
go func() {
|
||||||
for message := range slf.messageChannel {
|
for message := range messageChannel {
|
||||||
slf.dispatchMessage(message)
|
slf.dispatchMessage(message)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -344,7 +348,9 @@ func (slf *Server) Shutdown(err error) {
|
||||||
log.Error("Server", zap.Error(shutdownErr))
|
log.Error("Server", zap.Error(shutdownErr))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(slf.messageChannel)
|
for _, messageChannel := range slf.messageChannel {
|
||||||
|
close(messageChannel)
|
||||||
|
}
|
||||||
slf.messagePool.Close()
|
slf.messagePool.Close()
|
||||||
slf.initMessageChannel = false
|
slf.initMessageChannel = false
|
||||||
}
|
}
|
||||||
|
@ -389,7 +395,10 @@ func (slf *Server) PushMessage(messageType MessageType, attrs ...any) {
|
||||||
msg := slf.messagePool.Get()
|
msg := slf.messagePool.Get()
|
||||||
msg.t = messageType
|
msg.t = messageType
|
||||||
msg.attrs = attrs
|
msg.attrs = attrs
|
||||||
slf.messageChannel <- msg
|
for _, channel := range slf.messageChannel {
|
||||||
|
channel <- msg
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// PushCrossMessage 推送跨服消息到特定跨服的服务器中
|
// PushCrossMessage 推送跨服消息到特定跨服的服务器中
|
||||||
|
|
Loading…
Reference in New Issue