采用缓冲池处理服务器消息
This commit is contained in:
parent
b743d299b3
commit
8b65491283
|
@ -8,3 +8,12 @@ func WithProd() Option {
|
||||||
srv.prod = true
|
srv.prod = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithMessageBufferSize 通过特定的消息缓冲池大小运行服务器
|
||||||
|
// - 默认大小为 1024
|
||||||
|
// - 消息数量超出这个值的时候,消息处理将会造成更大的开销(频繁创建新的结构体),同时服务器将输出警告内容
|
||||||
|
func WithMessageBufferSize(size int) Option {
|
||||||
|
return func(srv *Server) {
|
||||||
|
srv.messagePoolSize = size
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -45,6 +45,7 @@ type Server struct {
|
||||||
grpcServer *grpc.Server // GRPC模式下的服务器
|
grpcServer *grpc.Server // GRPC模式下的服务器
|
||||||
gServer *gNet // TCP或UDP模式下的服务器
|
gServer *gNet // TCP或UDP模式下的服务器
|
||||||
messagePool *synchronization.Pool[*message] // 消息池
|
messagePool *synchronization.Pool[*message] // 消息池
|
||||||
|
messagePoolSize int // 消息池大小
|
||||||
messageChannel chan *message // 消息管道
|
messageChannel chan *message // 消息管道
|
||||||
initMessageChannel bool // 消息管道是否已经初始化
|
initMessageChannel bool // 消息管道是否已经初始化
|
||||||
multiple bool // 是否为多服务器模式下运行
|
multiple bool // 是否为多服务器模式下运行
|
||||||
|
@ -73,7 +74,10 @@ func (slf *Server) Run(addr string) error {
|
||||||
var connectionInitHandle = func(callback func()) {
|
var connectionInitHandle = func(callback func()) {
|
||||||
slf.connections = synchronization.NewMap[string, *Conn]()
|
slf.connections = synchronization.NewMap[string, *Conn]()
|
||||||
slf.initMessageChannel = true
|
slf.initMessageChannel = true
|
||||||
slf.messagePool = synchronization.NewPool[*message](1024,
|
if slf.messagePoolSize <= 0 {
|
||||||
|
slf.messagePoolSize = 1024
|
||||||
|
}
|
||||||
|
slf.messagePool = synchronization.NewPool[*message](slf.messagePoolSize,
|
||||||
func() *message {
|
func() *message {
|
||||||
return &message{}
|
return &message{}
|
||||||
}, func(data *message) {
|
}, func(data *message) {
|
||||||
|
|
Loading…
Reference in New Issue