This commit is contained in:
laodaming 2023-09-22 11:22:32 +08:00
parent d00089c625
commit 745cea9617
2 changed files with 21 additions and 10 deletions

View File

@ -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: "",
},
}
//保存连接

View File

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