IM系统 文件传输的断点续传

IM系统 文件传输的断点续传

作者:千里孤行(http://blog.csdn.net/yanghehong)

 

一般的IM系统,除了基本的文字聊天功能之外,还可以传输文件。

 

而文件传输,断点续传基本上是一个基本需求了。(哈哈,貌似QQ也经历一个从无到有的过程,一开始的文件传输并没有支持断点续传,多年前的事不知道有没记错:))

 

断点续传是需要发送方程序和接收方程序)相互配合 (在下载中,就是服务器和客户端都要支持) 才能完成的,而IM发送方和接收方分别是两个客户端,所以可以自由设计,完全在控制之中。不过这里不去讨论整个实现的细节,只看看对于续传与否的判断问题。

 

有网友提出这么一个场景(来自CSDN论坛):

假如,开始我向对方传c:/a.rm文件,中途断掉,下次我传c:/directory/a.rm,虽然这两个文件名都是a.rm,但内容是完全不同的,
那对方怎么知道是新的文件还是上次未传完的文件,或者说,是续传,还是重新传?

 

 

 

鉴别是不是同一个文件,基本上要用文件的hash来比较。

 

IM系统点到点传文件,跟做语音聊天类似,不是只有一路文件的数据。一般需要两路。一路信令,一路文件数据。
要传文件的时候,发送方就把把文件用MD5算一下,把得到的hash值作为信令的一部分发给对方,对方保存。
然后才开始传文件。

 

中途发生断点。

 

后面再发起文件发送的时候,同样的,发送方计算MD5把hash值发给发送方,接收方比较一下已有的hash跟新收到的hash就可以确定是不是要续传还是新文件。接收方这个时候是不需要计算的。

也就是计算文件的hash,只发生一次,在发送方。

计算一个文件的hash,几百兆的文件也就几秒或者10多秒,这个相对于整个文件传输完成需要的时间是非常小的。

 

实际上,因为网速有限,大家可能一般不会传太大的文件,当传比较大的文件,上百兆的,大家基本不会期待它很快传完,如果几十分钟能传完就觉得可以了。这个时候传之前计算hash话掉的几秒-10几秒用户应该完全可以接受。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值