From bdbcc1bb358deacbc2250a46b22ad758c7067f9b Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Wed, 27 Dec 2023 10:04:45 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20client=20=E5=8C=85=E7=94=B1=E6=97=A0?= =?UTF-8?q?=E7=95=8C=E7=BC=93=E5=86=B2=E5=8C=BA=E8=B0=83=E6=95=B4=E4=B8=BA?= =?UTF-8?q?=E5=9F=BA=E4=BA=8E=20chan=20=E5=AE=9E=E7=8E=B0=E7=9A=84?= =?UTF-8?q?=E7=BC=93=E5=86=B2=E5=8C=BA=EF=BC=8C=E6=96=B0=E5=A2=9E=20RunByB?= =?UTF-8?q?ufferSize=20=E5=87=BD=E6=95=B0=E6=94=AF=E6=8C=81=E4=BB=A5?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E7=BC=93=E5=86=B2=E5=8C=BA=E5=A4=A7=E5=B0=8F?= =?UTF-8?q?=E8=BF=90=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/client/client.go | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/server/client/client.go b/server/client/client.go index ecdcc68..1bfb16b 100644 --- a/server/client/client.go +++ b/server/client/client.go @@ -27,17 +27,28 @@ func CloneClient(client *Client) *Client { // Client 客户端 type Client struct { *events - core Core - mutex sync.Mutex - closed bool // 是否已关闭 - pool *concurrent.Pool[*Packet] // 数据包缓冲池 - loop *writeloop.Unbounded[*Packet] // 写入循环 - block chan struct{} // 以阻塞方式运行 + core Core + mutex sync.Mutex + closed bool // 是否已关闭 + pool *concurrent.Pool[*Packet] // 数据包缓冲池 + loop *writeloop.Channel[*Packet] // 写入循环 + loopBufferSize int // 写入循环缓冲区大小 + block chan struct{} // 以阻塞方式运行 } // Run 运行客户端,当客户端已运行时,会先关闭客户端再重新运行 // - block 以阻塞方式运行 func (slf *Client) Run(block ...bool) error { + return slf.RunByBufferSize(1024*10, block...) +} + +// RunByBufferSize 指定写入循环缓冲区大小运行客户端,当客户端已运行时,会先关闭客户端再重新运行 +// - block 以阻塞方式运行 +func (slf *Client) RunByBufferSize(size int, block ...bool) error { + if size <= 0 { + return errors.New("buffer size must be greater than 0") + } + slf.loopBufferSize = size slf.mutex.Lock() if !slf.closed { slf.mutex.Unlock() @@ -69,7 +80,7 @@ func (slf *Client) Run(block ...bool) error { data.data = nil data.callback = nil }) - slf.loop = writeloop.NewUnbounded[*Packet](slf.pool, func(message *Packet) error { + slf.loop = writeloop.NewChannel[*Packet](slf.pool, slf.loopBufferSize, func(message *Packet) error { err := slf.core.Write(message) if message.callback != nil { message.callback(err)