diff --git a/wshandler/room.go b/wshandler/room.go index b807e42..decb7c6 100644 --- a/wshandler/room.go +++ b/wshandler/room.go @@ -93,10 +93,14 @@ func (r *room) loop(ctx context.Context, conns *map[string]*wsconn) (normalEnd b enc.Encode(ds) for _, conn := range *conns { - r.sendMsgChan <- send_msg_queue_elem{ - to: conn, - mt: websocket.TextMessage, - msg: buff.Bytes(), + pmsg, err := websocket.NewPreparedMessage(websocket.TextMessage, buff.Bytes()) + if err != nil { + logger.Println("websocket.NewPreparedMessage failed :", err) + } else { + r.sendMsgChan <- send_msg_queue_elem{ + to: conn, + pmsg: pmsg, + } } } } diff --git a/wshandler/wshandler.go b/wshandler/wshandler.go index d3a765c..c323dc3 100644 --- a/wshandler/wshandler.go +++ b/wshandler/wshandler.go @@ -81,9 +81,9 @@ type EventReceiver interface { } type send_msg_queue_elem struct { - to *wsconn - mt int - msg []byte + to *wsconn + pmsg *websocket.PreparedMessage + //msg []byte } type websocketHandlerBase struct { @@ -137,7 +137,7 @@ func NewWebsocketHandler(consumer session.Consumer, redisUrl string) (*Websocket defer func() { r := recover() if r != nil { - logger.Println("send_msg_queue_elem sender recover :", r, string(elem.msg)) + logger.Println("send_msg_queue_elem sender recover :", r) } }() if elem == nil { @@ -147,7 +147,7 @@ func NewWebsocketHandler(consumer session.Consumer, redisUrl string) (*Websocket return } - elem.to.WriteMessage(elem.mt, elem.msg) + elem.to.WritePreparedMessage(elem.pmsg) } for elem := range sendchan { @@ -327,10 +327,15 @@ func (ws *WebsocketHandler) mainLoop(ctx context.Context) { Body: usermsg.Body, Tag: usermsg.Tag, }) + pmsg, err := websocket.NewPreparedMessage(websocket.TextMessage, ds) + if err != nil { + logger.Println("websocket.NewPreparedMessage failed :", err) + return false + } + ws.sendMsgChan <- send_msg_queue_elem{ - to: conn, - mt: websocket.TextMessage, - msg: ds, + to: conn, + pmsg: pmsg, } return true