From 8b65491283a0352730648540acfbcd59467f1013 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Fri, 28 Apr 2023 09:52:27 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E7=94=A8=E7=BC=93=E5=86=B2=E6=B1=A0?= =?UTF-8?q?=E5=A4=84=E7=90=86=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/options.go | 9 +++++++++ server/server.go | 6 +++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/server/options.go b/server/options.go index 389bd6c..055a0e2 100644 --- a/server/options.go +++ b/server/options.go @@ -8,3 +8,12 @@ func WithProd() Option { srv.prod = true } } + +// WithMessageBufferSize 通过特定的消息缓冲池大小运行服务器 +// - 默认大小为 1024 +// - 消息数量超出这个值的时候,消息处理将会造成更大的开销(频繁创建新的结构体),同时服务器将输出警告内容 +func WithMessageBufferSize(size int) Option { + return func(srv *Server) { + srv.messagePoolSize = size + } +} diff --git a/server/server.go b/server/server.go index d19ccd1..2e6737c 100644 --- a/server/server.go +++ b/server/server.go @@ -45,6 +45,7 @@ type Server struct { grpcServer *grpc.Server // GRPC模式下的服务器 gServer *gNet // TCP或UDP模式下的服务器 messagePool *synchronization.Pool[*message] // 消息池 + messagePoolSize int // 消息池大小 messageChannel chan *message // 消息管道 initMessageChannel bool // 消息管道是否已经初始化 multiple bool // 是否为多服务器模式下运行 @@ -73,7 +74,10 @@ func (slf *Server) Run(addr string) error { var connectionInitHandle = func(callback func()) { slf.connections = synchronization.NewMap[string, *Conn]() 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 { return &message{} }, func(data *message) {