Modify conversation_id index options (#3722)

* Modify conversation_id index options

Removed the unique constraint from the conversation_id index.

* fix(msggateway): reset read deadline in pong handler to prevent Web client timeout

Root cause:
Due to browser API restrictions, Web (Wasm) clients cannot actively send standard WebSocket Ping frames. They rely entirely on server-initiated Pings (every 27s) and automatic browser Pong responses to maintain the connection. The `pongHandler` was empty and failed to reset the connection's read deadline upon receiving a Pong, causing the server's read loop to strictly time out at 30 seconds.

Solution:
Call `c.setReadDeadline()` inside the `pongHandler` to properly extend the connection's lifespan when a Pong frame is received.

---------

Co-authored-by: OpenIM-Gordon <1432970085@qq.com>
This commit is contained in:
buvidk1234 2026-06-04 20:03:52 +08:00 committed by GitHub
parent 8f913ca13b
commit 1ac6a259dd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 11 additions and 1 deletions

View File

@ -208,7 +208,11 @@ func (c *websocketClientConn) pingHandler(appData string) error {
return nil return nil
} }
func (c *websocketClientConn) pongHandler(string) error { func (c *websocketClientConn) pongHandler(appData string) error {
log.ZDebug(context.Background(), "pong handler recv pong", "remoteAddr", c.conn.RemoteAddr(), "appData", appData)
if err := c.setReadDeadline(); err != nil {
return err
}
return nil return nil
} }

View File

@ -47,6 +47,12 @@ func NewConversationMongo(db *mongo.Database) (*ConversationMgo, error) {
}, },
Options: options.Index(), Options: options.Index(),
}, },
{
Keys: bson.D{
{Key: "conversation_id", Value: 1},
},
Options: options.Index(),
},
}) })
if err != nil { if err != nil {
return nil, errs.Wrap(err) return nil, errs.Wrap(err)