private void WatchSocketClient() { KK.Sleep(3 * 1000); while (watching) { KK.Sleep(DETECT_INTERVAL_MILLS); if (IsCurrentInDisabledTimeRange()) { continue; } try { if (notifyRestarting) { logger.InfoFormat("already tell socket client to reconnect"); continue; } bool connected = socketClient.IsConnected(); // 如果已未连接,则通知重新连接 if (!connected) { TellToReconnect("already disconnected"); continue; } RawMessage msg = MessageUtils.BuildPingMessage(ClientService.AssignedClientNo); socketClient.Send(msg); continuousDisconnectedCount = 0; counter.IncrementPing(); long pingCnt = counter.GetPingCount(); long pongCnt = counter.GetPongCount(); DateTime dt = DateTime.Now; if (dt.Minute > 57 && dt.Second % 8 == 0) { logger.InfoFormat("dice socket connected#{0}, ping#{1}, pong#{2}", connected, pingCnt, pongCnt); } // 如果ping和pong相差超过三次,则通知重新连接 long delta = pingCnt - pongCnt; if (delta > 3) { TellToReconnect("already over " + delta + " no pong response from server"); } } catch (Exception e) { logger.Error("WatchSocketClient error", e); } finally { } } }