From b100148f54a333533f04af084bc8709ff3608966 Mon Sep 17 00:00:00 2001 From: mountain Date: Mon, 22 Jan 2024 17:14:45 +0900 Subject: [PATCH] =?UTF-8?q?WriteMessage=EB=A5=BC=20WritePreparedMessage?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wshandler/room.go | 12 ++++++++---- wshandler/wshandler.go | 21 +++++++++++++-------- 2 files changed, 21 insertions(+), 12 deletions(-) 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