请问,一个winsock数据请求延时的问题?我们有一个client->server->database体系的系统。client启动时通过winsock和server端建立连接,并且在运行过程中,在这条连接上向server发各种request,并异步地收到server相应的response data。client退出会关闭这条连接。client和server都工作在LAN中。一直用得好好的。最近,换了一台更好的服务器,还是跑原来的server程序。但是,从这以后,就出问题了。这是一个很奇怪的问题,现象是:每到客户端连接服务器的数量达到每天的高峰的时候,client所有向server发送的winsock request,回经过很长时间(2-5分钟)才被server程序收到。在client的反应就是系统没反应或反应很慢。
我查过服务器程序日志,数据包并没有丢失,只是过了好几分钟,才被server程序收到。(而在正常的情况下,request应该在1秒钟内到达server程序。)我还检查过,在出问题的时候,我通过同一client访问这台服务器的web service服务程序,速度很快,正常。而且,在出现问题的时候,我试过从client去telnet那台server的winsock侦听端口(这个端口就是client程序要连接的server port)时,反应很慢
我感觉应该和我的程序没啥关系。因为,这种情况在换服务器之前没有出现过。我感觉是系统设置问题,比如TCP/IP,网卡的相关设置等。无奈,我不是这方面的专家,缺乏此等经验,所以特来求救!!!
请问,为什么会出现这种超级延时问题?(延时好几分钟;client程序也没收到server的一场信息,比如被拒绝等)
有什么办法可以解决这个问题?谢谢!

解决方案 »

  1.   

    楼主一直提到winsock,难道你是在用WINDOWS API编程吗?那个概念在C++里还有,到了C#里面就不提了,改叫Socket了。
      

  2.   

    呵呵,换思路看看,
    在.NET环境下实现分布应用很方便,建议用这种方式试试看。http://files.cnblogs.com/mgod/CSharpYcjk.rar
    看看这个例子,很有趣的。个人感觉用这种思路解决这类问题非常方便,就是不清楚效率怎么样。楼主可以试试看
      

  3.   


    高峰时,连接数在500-800之间。服务器是多线程模式,异步的。 具体的数据流如下: client request -> server -> IBM Websphere MQ -> MDS service (我们的服务器程序,用于和MQ 及 BSC service 交互) -> BSC service (我们的服务器程序,用于读写数据库及于MDS service交互) -> Database反方向返回数据。现在的问题是:在 MDS service 这里,收到的client的数据就已经是延时了的数据。