update wecom websocket
This commit is contained in:
parent
eec93884c8
commit
ba5d57c0fd
1 changed files with 27 additions and 0 deletions
|
|
@ -613,6 +613,28 @@ func (c *WeComWSChannel) connect() error {
|
||||||
c.connected = true
|
c.connected = true
|
||||||
c.connMu.Unlock()
|
c.connMu.Unlock()
|
||||||
|
|
||||||
|
// 设置心跳超时和标准 ping/pong 处理器 (处理底层心跳)
|
||||||
|
deadline := time.Duration(c.config.HeartbeatInterval) * 3 * time.Second
|
||||||
|
conn.SetReadDeadline(time.Now().Add(deadline))
|
||||||
|
|
||||||
|
originalPingHandler := conn.PingHandler()
|
||||||
|
conn.SetPingHandler(func(appData string) error {
|
||||||
|
conn.SetReadDeadline(time.Now().Add(deadline))
|
||||||
|
if originalPingHandler != nil {
|
||||||
|
return originalPingHandler(appData)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
originalPongHandler := conn.PongHandler()
|
||||||
|
conn.SetPongHandler(func(appData string) error {
|
||||||
|
conn.SetReadDeadline(time.Now().Add(deadline))
|
||||||
|
if originalPongHandler != nil {
|
||||||
|
return originalPongHandler(appData)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
logger.InfoC("wecom_ws", "WebSocket connected")
|
logger.InfoC("wecom_ws", "WebSocket connected")
|
||||||
|
|
||||||
// 触发连接成功事件
|
// 触发连接成功事件
|
||||||
|
|
@ -696,6 +718,9 @@ func (c *WeComWSChannel) readLoop() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 更新读超时,心跳间隔的 3 倍,如果没有收到任何消息则主动断开
|
||||||
|
conn.SetReadDeadline(time.Now().Add(time.Duration(c.config.HeartbeatInterval) * 3 * time.Second))
|
||||||
|
|
||||||
// 先读取原始消息
|
// 先读取原始消息
|
||||||
messageType, rawMessage, err := conn.ReadMessage()
|
messageType, rawMessage, err := conn.ReadMessage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -746,6 +771,8 @@ func (c *WeComWSChannel) writeLoop() {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 更新写超时
|
||||||
|
conn.SetWriteDeadline(time.Now().Add(10 * time.Second))
|
||||||
if err := conn.WriteJSON(msg); err != nil {
|
if err := conn.WriteJSON(msg); err != nil {
|
||||||
logger.ErrorCF("wecom_ws", "WebSocket write error", map[string]any{
|
logger.ErrorCF("wecom_ws", "WebSocket write error", map[string]any{
|
||||||
"error": err.Error(),
|
"error": err.Error(),
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue