最近因项目须要,须要把必定数量的中等文件从开发板上传到电脑上,分别选择了FTP和TCP自定义协议两种方式进行传输,进行了简单的对比测试,故作以下记录。网络
开发板:Linux,ARMv7 单核,内存512M多线程
PC:winodw, i7,8G内存,SSD测试
网络:100M,局域网线程
文件:大小4.06M,数量50个设计
一、FTP上传,短链接,单线程内存
二、FTP上传,长链接,单线程开发
三、TCP上传,短链接,单线程同步
四、TCP上传,短链接,多线程程序
五、TCP上传,长链接,单线程数据
说明
一、这里提的TCP上传,是指使用自定义协议TCP方式上传。
二、短链接是指每上传一个文件就链接一次,传完后就关闭链接。
三、长链接是指先链接,再上传多个文件,到退出程序时再关闭链接。
四、单线程是指全部文件的链接、发送、关闭都是在一个线程内完成。
五、多线程是指一个文件对应一个线程,多个文件同时使用多个线程发送。
自定义文件协议设计得很是简单。
客户端发送数据包 = 128B文件名 + 4B文件长度 + 文件数据
服务端响应数据包 = “OK”
之因此如此设计,列以下几点缘由:
一、固定文件名长度,方便处理,也方便定位到文件长度字段。
二、4字节文件长度恰好和整型相等,在两个32位小端机器上直接拷贝发送,代码简单。
三、文件长度字段能够方便检查数据是否接收彻底,解决粘包问题。
四、局域网内网络相对比较好,因此没带文件校验。
方案1,2分钟
方案2,45秒
方案3,20秒
方案4,20秒
方案5,20秒
分析以前,先计算一下理论的传输速度应该是多少,文件总大小约为203M,按100M网络计算,速度应该是203/(100/8) = 16秒。因此说20秒是一个比较不错的速度了,毕竟还有一些文件操做等操做,须要占用一些时间。
方案1和方案2比较
FTP创建链接相对复杂,不断的链接和断开确定消耗很多时间,因此长链接比短链接传输速度快也是应该的。
FTP方案和TCP方案比较
FTP方案总体上比TCP方案慢得多,毕竟FTP协议确定比自定义的文件传输协议要复杂得多,交互指令越多,速度越慢。
方案3和方案4比较
两个方案的差异在因而否使用多线程发送。从结果来看,速度相差不大。由于网络的极限速度就是100M,同时发送再多的数据也没有用,都会阻塞在网络上。即便发送的速度可能快一点点,但开启多个线程、线程同步锁等也须要时间,可能相抵消了。
方案3和方案5比较
两个方案的差异在因而否使用长链接。从结果来看,速度相关不大。和上面分析同样,网络的极限速度是100M,而TCP在局域网内创建链接(三次握手)、关闭都很是快。对于发送大量数据的状况,是否使用长链接影响都不大。
从上面的测试和分析结果来看,在本项目中使用方案3或5(TCP上传,单线程),是比较合适的。首先传输速度上表现不错,并且避免使用多线程,不须要线程同步,代码设计更简单,越简单越容易作得更可靠。
固然上面的测试是不充分的,对于其余状况没有进行测试分析。例如,使用FTP多线程发送、更小的文件(小于1k)、更大的文件(大几百M)、更多的数量等等,因时间有限不作测试了。不过经过上面的分析,考虑各个因素对速度的影响,也大概能够选择出比较优的方案。若有机会再测试分析。
欢迎各位评论,指出不足之处。