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
                {
                }
            }
        }