日期:2014-05-17  浏览次数:20725 次

WCF 双向通信中很奇怪的问题
最近在试着做一个聊天程序,支持私聊和群发,测试的时候发现一个很奇怪的问题。
在用户数比较多的情况下,会发现,两个人私聊没有啥问题,但如果某一个发一个群发消息的话,导致其中有一个人或者几个人的通信信道异常,一致心跳检测失败,服务器端认为此用户已掉线。但实际上我都是在一台电脑上测试,网络是正常的。

我基本思路如下:客户端主动每4s发一个心跳包,服务器端接收到包以后更新心跳检测数组。服务器端每7s检查一下心跳包的时间戳。

同时当服务器收到某个人的群发消息时,会将消息广播给所有人,我的问题就是在广播消息的时候,会导致某客户端与服务器信道异常,一致客户端收不到广播消息,同时服务器也收不到心跳消息。为啥会出现信道异常呢。

请牛人帮我分析一下,这是为啥导致的。

下面是客户端的心跳包发送线程。

        private void ServerConnectionTest()
        {
 
            while (proxy != null && bConnected)
            {
                try
                {
                    
                    proxy.Update();
                }
                catch (Exception e)
                {
                    if (iTrytime++ > 3)
                    {                     
                        bConnected = false;
                        return;
                    }

                    else
                    {
                        Thread.Sleep(1000);
                        continue;
                    }
                }

                Thread.Sleep(4000);
                iTrytime = 0;
                bConnected = true;
            }


        }

谢谢
WCF