@@ -42,8 +42,6 @@ func ConnectUniversal(cli *client.QQClient) {
4242 continue
4343 } else {
4444 log .Infof ("已连接Websocket %v" , WsUrl )
45- go ping (cli , conn )
46- go listenApi (cli , conn )
4745 Conn = conn
4846 time .Sleep (1 * time .Second )
4947 connectLock .Lock ()
@@ -54,30 +52,42 @@ func ConnectUniversal(cli *client.QQClient) {
5452 }
5553}
5654
57- func ping (cli * client.QQClient , conn * websocket.Conn ) {
58- errCount := 0
59- for errCount < 5 {
60- if err := conn .WriteMessage (websocket .PingMessage , []byte ("ping" )); err != nil {
61- log .Warnf ("websocket ping失败" )
62- errCount ++
63- } else {
64- errCount = 0
55+ func Ping (cli * client.QQClient ) {
56+ for {
57+ if Conn == nil {
58+ time .Sleep (5 * time .Second )
59+ continue
6560 }
66- time .Sleep (10 * time .Second )
61+ errCount := 0
62+ for errCount < 5 {
63+ _ = Conn .SetWriteDeadline (time .Now ().Add (time .Second * 5 ))
64+ if err := Conn .WriteMessage (websocket .PingMessage , []byte ("ping" )); err != nil {
65+ log .Warnf ("websocket ping失败 %+v" , err )
66+ errCount ++
67+ } else {
68+ errCount = 0
69+ }
70+ time .Sleep (10 * time .Second )
71+ }
72+ log .Errorf ("websocket 连续ping失败5次,开始重连,60秒后重新开始ping" )
73+ _ = Conn .Close ()
74+ ConnectUniversal (cli )
75+ time .Sleep (60 * time .Second )
6776 }
68- log .Errorf ("websocket 连续ping失败5次,断开连接" )
69- _ = conn .Close ()
70- ConnectUniversal (cli )
7177}
7278
73- func listenApi (cli * client.QQClient , conn * websocket.Conn ) {
74- defer conn .Close ()
75-
79+ func ListenApi (cli * client.QQClient ) {
7680 for {
77- messageType , buf , err := conn .ReadMessage ()
81+ if Conn == nil {
82+ time .Sleep (5 * time .Second )
83+ continue
84+ }
85+ messageType , buf , err := Conn .ReadMessage ()
7886 if err != nil {
79- log .Warnf ("监听反向WS API时出现错误: %v" , err )
80- break
87+ log .Warnf ("监听反向WS API时出现错误: %v 10秒后重试" , err )
88+ ConnectUniversal (cli )
89+ time .Sleep (10 * time .Second )
90+ continue
8191 }
8292 if messageType == websocket .PingMessage || messageType == websocket .PongMessage {
8393 continue
@@ -96,7 +106,7 @@ func listenApi(cli *client.QQClient, conn *websocket.Conn) {
96106 if err != nil {
97107 log .Errorf ("序列化ApiResp错误 %v" , err )
98108 }
99- err = conn .WriteMessage (websocket .BinaryMessage , respBytes )
109+ err = Conn .WriteMessage (websocket .BinaryMessage , respBytes )
100110 if err != nil {
101111 log .Errorf ("发送ApiResp错误 %v" , err )
102112 }
0 commit comments