|
@@ -3,6 +3,7 @@ package ws
|
|
|
import (
|
|
|
"errors"
|
|
|
"eta/eta_api/utils"
|
|
|
+ "fmt"
|
|
|
"github.com/gorilla/websocket"
|
|
|
"sync"
|
|
|
"time"
|
|
@@ -29,12 +30,16 @@ type Message struct {
|
|
|
|
|
|
// readPump 处理读操作
|
|
|
func (s *Session) readPump() {
|
|
|
- defer manager.RemoveSession(s.Id)
|
|
|
+ defer func() {
|
|
|
+ fmt.Printf("读进程session %s closed", s.Id)
|
|
|
+ manager.RemoveSession(s.Id)
|
|
|
+ }()
|
|
|
s.Conn.SetReadLimit(maxMessageSize)
|
|
|
- _ = s.Conn.SetReadDeadline(time.Now().Add(60 * time.Second))
|
|
|
+ _ = s.Conn.SetReadDeadline(time.Now().Add(ReadTimeout))
|
|
|
for {
|
|
|
_, message, err := s.Conn.ReadMessage()
|
|
|
if err != nil {
|
|
|
+ fmt.Printf("websocket 错误关闭 %s closed", err.Error())
|
|
|
handleCloseError(err)
|
|
|
return
|
|
|
}
|
|
@@ -43,6 +48,7 @@ func (s *Session) readPump() {
|
|
|
// 处理消息
|
|
|
if err = manager.HandleMessage(s.UserId, s.Id, message); err != nil {
|
|
|
//写应答
|
|
|
+
|
|
|
_ = s.writeWithTimeout(err.Error())
|
|
|
|
|
|
}
|
|
@@ -83,6 +89,7 @@ func (s *Session) writeWithTimeout(msg string) error {
|
|
|
func (s *Session) writePump() {
|
|
|
ticker := time.NewTicker(basePingInterval)
|
|
|
defer func() {
|
|
|
+ fmt.Printf("写继进程:session %s closed", s.Id)
|
|
|
manager.RemoveSession(s.Id)
|
|
|
ticker.Stop()
|
|
|
}()
|
|
@@ -105,12 +112,15 @@ func handleCloseError(err error) {
|
|
|
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway) {
|
|
|
var wsErr *websocket.CloseError
|
|
|
if !errors.As(err, &wsErr) {
|
|
|
+ fmt.Printf("websocket未知错误 %s", err.Error())
|
|
|
utils.FileLog.Error("未知错误 %s", err.Error())
|
|
|
} else {
|
|
|
switch wsErr.Code {
|
|
|
case websocket.CloseNormalClosure:
|
|
|
+ fmt.Println("websocket正常关闭连接")
|
|
|
utils.FileLog.Info("正常关闭连接")
|
|
|
default:
|
|
|
+ fmt.Printf("websocket关闭代码 %d:%s", wsErr.Code, wsErr.Text)
|
|
|
utils.FileLog.Error("关闭代码:%d:%s", wsErr.Code, wsErr.Text)
|
|
|
}
|
|
|
}
|
|
@@ -125,7 +135,7 @@ func (s *Session) forceClose() {
|
|
|
// 发送关闭帧
|
|
|
_ = s.Conn.WriteControl(websocket.CloseMessage,
|
|
|
websocket.FormatCloseMessage(websocket.ClosePolicyViolation, "heartbeat failed"),
|
|
|
- time.Now().Add(5*time.Second))
|
|
|
+ time.Now().Add(writeWaitTimeout))
|
|
|
_ = s.Conn.Close()
|
|
|
s.Conn = nil // 标记连接已关闭
|
|
|
utils.FileLog.Info("连接已强制关闭",
|