问题描述
一个服务单一个客户端1.将服务器,和客户端都在本机上进行传输很快本机很快,1s可发几万次2.将服务器放到局域网内另一台linux机器,客户端放到windows上进行发送的时候就很慢将服务器放到局域网内另一台windows机器,客户端放到windows进行发送,发送效率一样慢客户端:while(true){一次发送的数据为(8+15)=23字节,write(23字节);等服务端得响应read(16字节);}服务端:while(true){接受,然后返回响应12+4=16的字节}客户端发送23字节,循环发送1000次,用时60s。将socketTcpNodelay设置为true后效率有所提升发送23字节,循环发送1000次,用时3s。settcpnodelay(true)我定位影响效率的原因是in.read()阻塞导致的.settcpnodelay(flase)即默认情况下每次read()耗时202ms左右,write()0mssettcpnodelay(true)即禁用negal算法,每次read()耗时1ms左右,write()1-3ms左右偶尔出现一次40ms的情况请教各位大侠,该如何优化,网络传输,read阻塞的情况啊是JVM虚拟机的对socket的网络发送,有限制??小弟先在此谢过!!
解决方案
解决方案二:
该回复于2011-04-25 09:22:55被版主删除
解决方案三:
想到两个思路:1.传统IO下设置Socket属性:客户端:setTcpNoDelay(true)setReceiveBufferSize(16)setSendBufferSize(23)setKeepAlive(true)setPerformancePreferences(1,2,0)服务器:setTcpNoDelay(true)setReceiveBufferSize(23)setSendBufferSize(16)setKeepAlive(true)setPerformancePreferences(1,2,0)2.使用NIOlz可以试一下,但是请把最后的结果贴出来哈,我这儿没有环境,只有一台本本
解决方案四:
好的,不好意思!来晚了!昨天也是没有环境...只能今天弄了待会就把测试结果贴上来
解决方案五:
引用楼主niejun111的回复:
一个服务单一个客户端1.将服务器,和客户端都在本机上进行传输很快本机很快,1s可发几万次2.将服务器放到局域网内另一台linux机器,客户端放到windows上进行发送的时候就很慢将服务器放到局域网内另一台windows机器,客户端放到windows进行发送,发送效率一样慢客户端:while(true){一次发送的数据为……
最新测试结果最新测试结果..settcpnodelay(flase)情况下在一次发送1536字节获取响应70字节循环一1000。。只需1500ms左右在发送<1500字节的时候获取响应70字节循环一1000。。竟然达到41000ms左右[点击查看原始大小图片]settcpnodelay(true)情况下在一次发送1536字节获取响应70字节循环一1000。。只需1500ms左右在发送<1500字节的时候获取响应70字节循环一1000。。只需800ms左右
解决方案六:
引用2楼leisore的回复:
想到两个思路:1.传统IO下设置Socket属性:客户端:setTcpNoDelay(true)setReceiveBufferSize(16)setSendBufferSize(23)setKeepAlive(true)setPerformancePreferences(1,2,0)服务器:setT……
最新测试结果..settcpnodelay(flase)情况下在一次发送1536字节获取响应70字节循环一1000。。只需1500ms左右在发送<1500字节的时候获取响应70字节循环一1000。。竟然达到41000ms左右settcpnodelay(true)情况下在一次发送1536字节获取响应70字节循环一1000。。只需1500ms左右在发送<1500字节的时候获取响应70字节循环一1000。。只需800ms左右
解决方案七:
该回复于2011-04-25 13:48:26被版主删除
解决方案八:
楼主这不对啊,怎么还带广告啊代码也木有给我们诶叼胃口叼胃口.......
解决方案九:
引用7楼clarck_913的回复:
楼主这不对啊,怎么还带广告啊代码也木有给我们诶叼胃口叼胃口.......
怎么可能有广告!!