From cd108c6055fb1a3d82cdfd232c5fa8ad5c8fb8d0 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Thu, 7 Sep 2023 12:13:40 +0800 Subject: [PATCH] 1 --- .../internal/logic/datatransferlogic.go | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index a27dfdc3..d66990fb 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -70,15 +70,7 @@ var ( //用户标识的连接(白板用户不存) mapUserConnPool = make(map[string]map[string]struct{}) //key是user_id +"_"+guest_id (val是个普通map,存储这个用户的所有连接标识) //用户标识的连接增删操作队列 - userConnPoolCtlChan = make(chan userConnPoolCtlChanItem, 2000) - //每个websocket连接入口缓冲队列长度 - websocketInChanLen = 1000 - //每个websocket连接出口缓冲队列长度 - websocketOutChanLen = 1000 - //渲染任务调度(添加任务/删除任务/修改任务属性)缓冲队列长度(该队列用于避免map并发读写冲突) - renderImageTaskCtlChanLen = 500 - //渲染任务缓冲队列长度 - renderChanLen = 500 + userConnPoolCtlChan = make(chan userConnPoolCtlChanItem, getCacheChanLenByLevel(4)) //是否开启debug openDebug = true //允许跨域的origin @@ -188,6 +180,8 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo *auth.Use l.sendGetUniqueIdErrResponse(conn) return wsConnectItem{}, err } + //根据不同用户获取不同缓冲队列长度 + websocketInChanLen, websocketOutChanLen, renderImageTaskCtlChanLen, renderChanLen := getCacheChanLenByUser(userInfo.UserId, userInfo.GuestId) ws := wsConnectItem{ conn: conn, userAgent: userAgent, @@ -219,6 +213,35 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo *auth.Use return ws, nil } +// 根据level获取缓冲队列长度 +func getCacheChanLenByLevel(level int) int { + switch level { + case 1: + return 50 + case 2: + return 100 + case 3: + return 500 + case 4: + return 1000 + default: + return 50 + } +} + +// 根据用户获取缓冲队列长度 +func getCacheChanLenByUser(userId, guestId int64) (websocketInChanLen, websocketOutChanLen, renderImageTaskCtlChanLen, renderChanLen int) { + var l int + if userId > 0 { + l = getCacheChanLenByLevel(3) + } else if guestId > 0 { + l = getCacheChanLenByLevel(2) + } else { + l = getCacheChanLenByLevel(2) + } + return l, l, l, l +} + // 添加用户索引池ws连接 func createUserConnPoolElement(userId, guestId int64, uniqueId string) { data := userConnPoolCtlChanItem{