应用是这样的:客户端向服务器端发送数据请求,服务端向客户端发送大量数据;如果在三台不同的机器上运行三个客户端,运行的效果还可以。但是如果在A机器上运行一台,B机器上运行一台,运行效果可以,然后在A机器上再启动一个客户端,那么观察下来,服务端发送的速度立刻就降低下来了,下降的幅度很非常大,有人能帮忙分析一下原因吗?

解决方案 »

  1.   

    客户端带宽是够的,因为一个客户端时后,占带宽20%左右(100Mbps),后面A机运行两个客户端时下降了,占用带宽为5% 左右(100Mbps),服务器端是没有做任何限制的,你同一台机器或者不同一台机器,在它看来都是一个socket而,它就是用那个socket发送数据
      

  2.   

    都是100Mbps。我说带宽不是问题是因为:第一种情况,A,B,C机器分别运行一个客户端程序,数据接收占用带宽稳定在20%,服务器端发送速度为60%。;第二种情况,还是A,B机器,A机器运行两个客户端,B运行一个客户端,A机器占用的带宽办成了5%,B占用的也为5%,服务端发送的占用10%;两种情况下,硬件条件和网络条件都没有变化;但是却带来的这么大的影响,可能的原因会是什么。难道在同一台机器上分别与服务器端程序建立两个socket连接的原因吗?
      

  3.   

    哦,意思是单机数据接收之消耗了 20Mbps 左右?
    那么两个程序一起跑所期望的理论值应该是 40Mbps 左右了。那么另一个是客户机的CPU情况如何?是否已经饱和?
    如果是超线程的CPU的话,那么饱和不能按100%算,只能按60%左右算。
    一般来说,一台机器跟服务器程序建立多个Socket是不会有这种影响的。
    如果你用过很久以前的 NetAnt,应该有印象,仅就一台目标服务器多线程下载是单线程下载速度的数倍。
      

  4.   

    就是简简单单的使用socket而已,还是没找到原因。。