socket 优化传输效率!!高手进

本文探讨了TCP传输在不同网络环境下效率的变化,特别是在本机与局域网内的表现差异。通过对比setTcpNoDelay选项开启前后的影响,发现对于小数据包传输,开启该选项能显著提高传输效率。
一个服务单 一个客户端

1.将服务器,和客户端都在本机上进行传输 很快
本机很快,1s可发几万次

2.将服务器放到 局域网内另一台 linux 机器,客户端放到windows 上进行发送的时候就很慢
将服务器放到 局域网内另一台 windows 机器,客户端放到windows 进行发送,发送效率一样慢


客户端:
while(true){

一次发送的数据为 (8+15)=23字节,write(23字节);
等服务端得响应 read(16字节);

}
服务端:
while(true){
接受,
然后返回 响应 12+4 = 16的字节

}

客户端发送23字节,循环发送1000次,用时 60s。

将socket TcpNodelay设置为true后效率有所提升
发送23字节,循环发送1000次,用时 3s。
settcpnodelay(true)

我定位影响效率的原因是 in.read()阻塞导致的.
settcpnodelay(flase)即默认情况下
每次read()耗时 202ms左右,write() 0ms
settcpnodelay(true)即禁用negal算法,
每次read()耗时 1ms 左右,write() 1-3ms左右
偶尔出现一次40ms的情况

请教各位大侠,该如何优化,网络传输,read阻塞的情况啊

是JVM虚拟机的对socket的网络发送,有限制??

小弟先在此谢过!!


最新测试结果..

settcpnodelay(flase)
情况下
在一次发送 1536字节 获取响应70字节 循环一1000。。只需1500ms左右
在发送<1500字节的时候 获取响应70字节 循环一1000。。竟然达到 41000ms左右

[img]http://dl.iteye.com/upload/attachment/470213/be162b29-1847-3a91-a0e3-49433b44a9c1.jpg[/img]

settcpnodelay(true)
情况下
在一次发送 1536字节 获取响应70字节 循环一1000。。只需1500ms左右
在发送<1500字节的时候 获取响应70字节 循环一1000。。只需800ms左右

[img]http://dl.iteye.com/upload/attachment/470268/87957deb-bbf0-36e7-81bc-8479984bc615.jpg[/img]


附带测试的小程序..
jar包中,包含源程序!
等待各位大侠优化~~


更多解决方案请进入[url=http://www.code110.com]code110技术导航站[/url]


方案优化1. 小数据包请将setNodelay(true);能够明显提升速度,此为TCP不延迟发送
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值