QQ上传大文件为什么这么快
今天和同事在群里讨论“QQ上传大文件/QQ群发送大文件时,可以在极短的时间内完成”是如何做到的。
有时候我们通过QQ上传一个几百M的文件,竟然只用了几秒钟,从带宽上限制可以得出,实际上传文件是不可能的。
实现的思路肯定是根据文件内容生成一个“唯一的标识符”,根据这个标识符去判断服务器上是否已经存在这个文件,如果存在,则不需要再次上传。
但是根据文件内容生成“唯一的标识符”,效率会不会有问题呢。
于是用php做个最简单的测试:
以下是代码片段: |
输出结果如下:
以下是引用片段: 文件大小是:487.146002769MB c9cb9487b71fa2130b5d1110a2819e34 Timer NO:1 Did something in 3.28920602798 seconds; |
可以看到,MD5一个487M的文件,只用了3.29秒,比我预想的快了许多。因此,通过“md5('文件内容')”生成“唯一标识符”的方法是完全可行的,效率不会存在问题,我想上面的方法肯定还有优化的空间。QQ的大文件快速上传估计就是通过这样的方式实现的。在上传大文件的时候,先查询下服务器看看文件的“唯一标识符”是否存在,只要这个标识符存在,就不用再上传文件了。
扩展:
1 由于md5的特性,“md5('文件内容')”也可以用于校验“文件的完整性”和“内容是否有被修改过”,这也是我们下载一些软件时,在旁边能看到MD5效验码的原因。
2 APACHE 的 ETAG 实现:APACHE 的 ETAG 是可以自己定义方法的,较普遍的做法是根据文件的内容生成ETAG。
因为当有多台web服务器时,以浏览图片为例,想要让浏览器缓存你的图片。但你传到不同服务器上的图片时间不会一致,所以不能用文件的last_modify时间作为cache的参照,这时候就可以采取发送ETAG,ETAG是按照图片内容生成特定字符串的。只要文件内容没有改变,ETAG就不会改变,cache就会有效。
建议继续学习:
- 介绍几个QQ开源项目及协议下载 (阅读:8718)
- 10个强大的Ajax jQuery文件上传程序 (阅读:7693)
- 解决securecrt rz 上传rar,gif文件不正确问题 (阅读:7024)
- md5到md5破解的一些科普 (阅读:5366)
- PHP处理Etag、lastModified和Expires (阅读:5064)
- PHP上传进度条深度解析 (阅读:4844)
- Codeigniter里的无刷新上传 (阅读:4493)
- 利用QQ游戏破解QQ密码 (阅读:4079)
- PHP上传文件类型彻底判断方案及PHP+nginx上传大小彻底控制方案 (阅读:3669)
- 再谈QQ游戏百万人在线的技术实现 (阅读:3564)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:rethink 来源: 博客园-rethink log
- 标签: ETAG MD5 QQ 上传
- 发布时间:2010-06-01 13:08:14
- [11] 产品设计之QQ邮箱登录页与淘宝登录页
- [10] 逃出你的肖申克(五):看不见的牢笼(上)
- [10] 五个实用的Google Analytics过
- [9] 读书:谣言
- [9] 分布式系统的事务处理
- [8] 关于不得不在python中使用代理访问网络的
- [8] 移动Web开发初学者指南
- [8] Python连接 MySQL 数据库的超时问
- [8] 社交网络语法:关于“Checkin”
- [8] 数据与理论结合,让交互设计更专业