1、有更新,还没测完,暂时归档
This commit is contained in:
@ -262,11 +262,13 @@ func (ws *WsConn) reconnect() {
|
||||
}
|
||||
}
|
||||
|
||||
// writeRequest 负责写出文本/控制帧以及心跳发送
|
||||
// 修复点:在函数退出时停止 heartTimer,避免底层定时器资源长时间存留
|
||||
func (ws *WsConn) writeRequest() {
|
||||
var (
|
||||
heartTimer *time.Timer
|
||||
err error
|
||||
)
|
||||
var (
|
||||
heartTimer *time.Timer
|
||||
err error
|
||||
)
|
||||
|
||||
if ws.HeartbeatIntervalTime == 0 {
|
||||
heartTimer = time.NewTimer(time.Hour)
|
||||
@ -274,31 +276,37 @@ func (ws *WsConn) writeRequest() {
|
||||
heartTimer = time.NewTimer(ws.HeartbeatIntervalTime)
|
||||
}
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ws.close:
|
||||
log.Info("[ws][" + ws.WsUrl + "] close websocket , exiting write message goroutine.")
|
||||
return
|
||||
case d := <-ws.writeBufferChan:
|
||||
err = ws.c.WriteMessage(websocket.TextMessage, d)
|
||||
case d := <-ws.pingMessageBufferChan:
|
||||
err = ws.c.WriteMessage(websocket.PingMessage, d)
|
||||
case d := <-ws.pongMessageBufferChan:
|
||||
err = ws.c.WriteMessage(websocket.PongMessage, d)
|
||||
case d := <-ws.closeMessageBufferChan:
|
||||
err = ws.c.WriteMessage(websocket.CloseMessage, d)
|
||||
case <-heartTimer.C:
|
||||
if ws.HeartbeatIntervalTime > 0 {
|
||||
err = ws.c.WriteMessage(websocket.TextMessage, ws.HeartbeatData())
|
||||
heartTimer.Reset(ws.HeartbeatIntervalTime)
|
||||
}
|
||||
}
|
||||
defer func() {
|
||||
if heartTimer != nil {
|
||||
heartTimer.Stop()
|
||||
}
|
||||
}()
|
||||
|
||||
if err != nil {
|
||||
log.Info("[ws][" + ws.WsUrl + "] write message " + err.Error())
|
||||
//time.Sleep(time.Second)
|
||||
}
|
||||
}
|
||||
for {
|
||||
select {
|
||||
case <-ws.close:
|
||||
log.Info("[ws][" + ws.WsUrl + "] close websocket , exiting write message goroutine.")
|
||||
return
|
||||
case d := <-ws.writeBufferChan:
|
||||
err = ws.c.WriteMessage(websocket.TextMessage, d)
|
||||
case d := <-ws.pingMessageBufferChan:
|
||||
err = ws.c.WriteMessage(websocket.PingMessage, d)
|
||||
case d := <-ws.pongMessageBufferChan:
|
||||
err = ws.c.WriteMessage(websocket.PongMessage, d)
|
||||
case d := <-ws.closeMessageBufferChan:
|
||||
err = ws.c.WriteMessage(websocket.CloseMessage, d)
|
||||
case <-heartTimer.C:
|
||||
if ws.HeartbeatIntervalTime > 0 {
|
||||
err = ws.c.WriteMessage(websocket.TextMessage, ws.HeartbeatData())
|
||||
heartTimer.Reset(ws.HeartbeatIntervalTime)
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Info("[ws][" + ws.WsUrl + "] write message " + err.Error())
|
||||
//time.Sleep(time.Second)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (ws *WsConn) Subscribe(subEvent interface{}) error {
|
||||
|
||||
Reference in New Issue
Block a user