From 557a5a3b46796679cfde14d5f28a918c2d1b821d Mon Sep 17 00:00:00 2001 From: Monet Lee Date: Tue, 9 Jul 2024 18:26:17 +0800 Subject: [PATCH] feat: implement send ping msg when platform is web in gateway. --- internal/msggateway/client.go | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/internal/msggateway/client.go b/internal/msggateway/client.go index 0581a025b..a901ebdfe 100644 --- a/internal/msggateway/client.go +++ b/internal/msggateway/client.go @@ -20,6 +20,7 @@ import ( "runtime/debug" "sync" "sync/atomic" + "time" "github.com/openimsdk/open-im-server/v3/pkg/msgprocessor" "github.com/openimsdk/protocol/constant" @@ -112,6 +113,25 @@ func (c *Client) readMessage() { _ = c.conn.SetReadDeadline(pongWait) c.conn.SetPingHandler(c.pingHandler) + if c.PlatformID == 5 { + go func() { + ticker := time.NewTicker(20) + defer ticker.Stop() + + for { + select { + case <-ticker.C: + if err := c.writePingMsg(); err != nil { + log.ZError(c.ctx, "send Ping Message error.", err) + return + } + case <-c.ctx.Done(): + return + } + } + }() + } + for { log.ZDebug(c.ctx, "readMessage") messageType, message, returnErr := c.conn.ReadMessage() @@ -321,6 +341,22 @@ func (c *Client) writeBinaryMsg(resp Resp) error { return c.conn.WriteMessage(MessageBinary, encodedBuf) } +func (c *Client) writePingMsg() error { + if c.closed.Load() { + return nil + } + + c.w.Lock() + defer c.w.Unlock() + + err := c.conn.SetWriteDeadline(writeWait) + if err != nil { + return err + } + + return c.conn.WriteMessage(PingMessage, nil) +} + func (c *Client) writePongMsg() error { if c.closed.Load() { return nil