This commit is contained in:
laodaming 2023-09-07 12:13:40 +08:00
parent a1f170b1ff
commit cd108c6055

View File

@ -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{