前言

最近因项目需要,需要把一定数量的中等文件从开发板上传到电脑上,分别选择了FTP和TCP自定义协议两种方式进行传输,进行了简单的对比测试,故做如下记录。

测试环境

开发板:Linux,ARMv7 单核,内存512M

PC:winodw, i7,8G内存,SSD

网络:100M,局域网

文件:大小4.06M,数量50个

四种方案简述

1、FTP上传,短连接,单线程

2、FTP上传,长连接,单线程

3、TCP上传,短连接,单线程

4、TCP上传,短连接,多线程

5、TCP上传,长连接,单线程

说明

1、这里提的TCP上传,是指使用自定义协议TCP方式上传。

2、短连接是指每上传一个文件就连接一次,传完后就关闭连接。

3、长连接是指先连接,再上传多个文件,到退出程序时再关闭连接。

4、单线程是指所有文件的连接、发送、关闭都是在一个线程内完成。

5、多线程是指一个文件对应一个线程,多个文件同时使用多个线程发送。

自定义文件传输协议

自定义文件协议设计得非常简单。

客户端发送数据包 = 128B文件名 + 4B文件长度 + 文件数据

服务端响应数据包 = OK

之所以如此设计,列如下几点原因:

1、固定文件名长度,方便处理,也方便定位到文件长度字段。

2、4字节文件长度刚好和整型相等,在两个32位小端机器上直接拷贝发送,代码简单。

3、文件长度字段可以方便检查数据是否接收完全,解决粘包问题。

4、局域网内网络相对比较好,所以没带文件校验。

测试结果

方案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)、更多的数量等等,因时间有限不做测试了。不过通过上面的分析,考虑各个因素对速度的影响,也大概可以选择出比较优的方案。如有机会再测试分析。

欢迎各位评论,指出不足之处。

FTP和TCP的文件传输效率对比测试分析的更多相关文章

  1. TCP通信粘包问题分析和解决

    转载至https://www.cnblogs.com/kex1n/p/6502002.html 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发 ...

  2. 应用层协议FTP、DNS协议、HTTP协议分析

    分析所用软件下载:Wireshark-win32-1.10.2.exe 一.阅读导览 1.分析FTP协议 2.分析DNS协议 3. 分析HTTP协议 二.分析要求 (1)ftp部分: 学习 Serv- ...

  3. TCP通信粘包问题分析和解决(全)(转)

    TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送 ...

  4. ftpget 从Windows FTP服务端获取文件

    /********************************************************************************* * ftpget 从Windows ...

  5. (转)distcp从ftp到hdfs拷贝文件

    link :http://blog.csdn.net/sptoor/article/details/11523469 distcp从ftp到hdfs拷贝文件: hadoop distcp ftp:// ...

  6. Linux中ftp不能上传文件/目录的解决办法

    在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法   在排除用户组和权限等问题后,最可能引 ...

  7. 打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹

    打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问 在win98,winme,win2000,win2003下都能正常上传文件夹,但在winxp+sp2下同样的文件夹就可能出现问题 1. 打开 ...

  8. 使用django表单,使网页添加上传文件,并分析文件。

    开发环境是: apache + python + django+ eclipse(开发环境) 欲达到目的: 在网页上,添加上传文件控件.然后读取csv文件,并分析csv文件. 操作步骤: django ...

  9. 多线程查询FTP Server上的文件

    情形是这样的,最近做一个自动化的项目,当batch跑成功了,FTP Server上会有特定的生成文件.但是不确定是什么时候会有,大概是batch跑完了5分钟之内吧,所以在脚本里设置检查点的时候,需要每 ...

随机推荐

  1. 利用pyecharts做地图数据展示

    首先, pip install pyecharts 为了地图上的数据能显示完全,加载好需要的城市地理坐标数据. pip install echarts-countries-pypkg pip inst ...

  2. Go语言规格说明书 之 类型声明(Type declarations)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语 ...

  3. ThreadLocal和线程同步机制对比

    共同点: ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题. 区别: 在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量. 这时该变量是多个线程共享的,使用同 ...

  4. html中子界面与父界面相互操作或传值

    一.在使用iframe的页面,要操作这个iframe里面的DOM元素可以用: contentWindow.contentDocument(测试的时候chrom浏览器,要在服务器环境下) content ...

  5. QA CodeDiff做什么?什么时间做?

    一.QA CodeDiff都在做什么 1.防止开发合并代码出错.要不删除了别人的要不删除了自己的,比如代码冲突后简单的选择使用他人或自己: 2.开发夹杂私货,在不通知QA的情况下私自修改bug或增加功 ...

  6. 并发之synchronized关键字的应用

    并发之synchronized关键字的应用 synchronized关键字理论基础 前两章我们学习了下java内存模型的相关知识, 现在我们来讲讲逢并发必出现的synchronized关键字. 作用 ...

  7. 简易图书管理系统(主要是jsp的练习)

    1:首先设计用户表和图书表,设计的字段和类型如下图所示 1.1:用户表user 1.2:图书表book 2:第二写实体类user.java和book.java package com.bie.po; ...

  8. jsp统计页面访问量和刷访问量的简单使用

    ~Jsp可以进行简单的页面访问量统计,当然也可以使用Jsp刷访问量. 1:第一种使用全局变量<%! int i=0;%>进行页面的访问量统计,只有新打开一个浏览器才可以进行统计. 2:第二 ...

  9. 为什么Nginx性能比Apache高

    Nginx的工作原理 nginx在启动后,会有一个master进程和多个worker进程.master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控wo ...

  10. Flink(二)CentOS7.5搭建Flink1.6.1分布式集群

    一. Flink的下载 安装包下载地址:http://flink.apache.org/downloads.html  ,选择对应Hadoop的Flink版本下载 [admin@node21 soft ...