1.问题:之前同事做的是上传和下载文件,存在问题一是上传的文件打包在apk包里,apk包非常大。升级时传输慢,也耗流量。二是下载速率与网速差距甚大。分析原因估计是服务器缓存和客户端缓存都采用的默认设置无法有效利用网络带宽,吞吐量上不来,导致速率上不来。所用改用socket基于tcp/ip协议传输数据测试。
2.下载:始终比speedTest少一半,后来不断增加客户端缓存和服务器缓存,速率才逐渐和speedTest不相上下。分析在一定的条件下。I/O缓存越大,越能有效利用网络带宽资源。linux服务器socket缓存有默认最大值,当设置值超过最大值时,系统只取到最大默认值。需要修改系统缓冲默认的最大值。服务器缓存大小通过前一篇文章查看。我采用了1MB发送缓存。客户端每次接收缓存和每次接收包大小都设为服务器的一半。
3.上传:上传包大小如何确定?刚开始我的想法是发送包大小要和socket发送缓存大小相同,这样每次发送这么大小的数据。计算每次发送这么多数据的时间。linux系统常默认的缓存是8KB,发送缓存采用系统默认的大约是8KB,发包大小也是这个值。服务器端接收缓存采用默认,大概也是8kB,每次接收数据包大小也是这个值。
4.问题新发现:今天看了一下服务器打印结果,服务器发送缓存为8K时,客户端下载速率也能达到很高的标准值,说明只提高客户端的接收缓存和接收包大小就可以提高速率。
5.问题新发现:测试服务器发送100M,1000M数据,客户端只接收一部分,然后关闭socket。但是发现服务器瞬间就发送结束了,客户端只接收1秒左右就关闭,服务器都会发送完毕。不知道这个数据到底怎么处理的。
看了一篇文章他也指出服务器发送特别快。他说"我使用setsockopt函数设置了一下客户端接收缓冲区的大小,我做了很多实验,发现,因为服务器端好想发送的很快,而客户端接受的确比较慢,这样一来,当客户端的接受缓冲区足够大后,发送接受数据就都没有问题了。我实验了一下,服务器发送几百MB的数据,客户端都能正常接收到。"
这也印证我发现的问题,1.服务器端发送数据非常快,可以达到瞬间发送GB数据的级别。2.客户端提高客户端缓冲可以增加接收速率。提高吞吐量。
如题:关于Socket,服务器端向客户端连续发数据,客户端无法完全接受的问题
http://bbs.csdn.net/topics/270005168
6.有一个问题:有资料称发送消息大小有64KB限制,实际操作时可以设置socket缓存和每次发包大小超过64KB,都可以,这个过程消息系统是不是分包传输?