diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 37e15346..0466ce64 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -192,7 +192,9 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo *auth.Use userId: userInfo.UserId, guestId: userInfo.GuestId, extendRenderProperty: extendRenderProperty{ - renderChan: make(chan websocket_data.RenderImageReqMsg, renderChanLen), + renderChan: make(chan websocket_data.RenderImageReqMsg, renderChanLen), + colorSelectedIndex: 0, + templateTag: "", }, } //保存连接 diff --git a/server/websocket/internal/logic/ws_render_image.go b/server/websocket/internal/logic/ws_render_image.go index a900c8b3..37154e96 100644 --- a/server/websocket/internal/logic/ws_render_image.go +++ b/server/websocket/internal/logic/ws_render_image.go @@ -22,6 +22,8 @@ import ( var ( //每个websocket渲染任务缓冲队列长度默认值 renderChanLen = 500 + //每个websocket渲染并发数 + renderChanConcurrency = 10 ) // 渲染处理器 @@ -58,9 +60,12 @@ func (r *renderProcessor) allocationMessage(w *wsConnectItem, data []byte) { func (w *wsConnectItem) consumeRenderImageData() { defer func() { if err := recover(); err != nil { - logx.Error("func renderImage err:", err) + logx.Error("func consumeRenderImageData err:", err) } }() + //限制并发 + limitChan := make(chan struct{}, renderChanConcurrency) + defer close(limitChan) for { select { case <-w.closeChan: //已关闭 @@ -74,20 +79,24 @@ func (w *wsConnectItem) consumeRenderImageData() { if data.RenderData.TemplateTagColor.SelectedColorIndex != w.extendRenderProperty.colorSelectedIndex { continue } - w.renderImage(data) + limitChan <- struct{}{} + go func(d websocket_data.RenderImageReqMsg) { + defer func() { + if err := recover(); err != nil { + logx.Error("func renderImage err:", err) + } + }() + defer func() { + <-limitChan + }() + w.renderImage(d) + }(data) } } } // 执行渲染任务 func (w *wsConnectItem) renderImage(renderImageData websocket_data.RenderImageReqMsg) { - //logx.Info("消费渲染数据:", string(data)) - /*var renderImageData websocket_data.RenderImageReqMsg - if err := json.Unmarshal(data, &renderImageData); err != nil { - w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "数据格式错误", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0) - logx.Error("invalid format of websocket render image message", err) - return - }*/ if renderImageData.RenderData.Logo == "" { w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "请传入logo", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0) return