利用多线程传输原理实现的网络媒体传输加速(附实验代码)
本文提及的的多线程传输指多通道传输。
原理:
把一些多线程的下载技术(例如flashget、网络蚂蚁所用到的),改进为一种数据缓冲技术,应用在文件、媒体等数据传输上。HTTP支持通过Range域来指定开始传输一个资源数据的起始位置。
实验测试:
在宿舍用CMCC的WLAN从www.xiaoxia.org下载一个13MB的文件,
单线程传输平均速度:14kB/s
8个线程传输平均速度:134kB/s
测试发现8个线程的平均传输速度比1个线程的平均传输速度要快,这是为什么呢?
继续测试发现,单个线程传输的时候,速度可能会慢慢减小,所以最后只剩下可怜的14kB/s的平均速度了。而在我实现的网络加速程序里,每个连接的生命时长大概只有10几秒钟,所以它们的速度可以保持很好。
上图的示例是播放一个youku上的高清视频。原来单个连接速度为55kB/s,看高清视频有时候会卡一下。开启网络加速后,使用8个连接同时传输 数据,最终平均速度为386kB/s,其中包含了创建连接等待响应的时间,以及一开始计算速度,估计数据缓冲块大小的时间在内。而实际当8个连接同时传输 的时候,瞬时速度超过了400kB/s。
但是,实现起来跟多线程下载工具实现在细节上有所不同。因为你需要支持网络流媒体的实时播放,所以你至少需要使用一个缓冲池来存放多线程下载的数据。流媒体是顺序播放的,所以传输位置必须是顺序的,而不能够随机定位一个连接传输数据的位置。
例如下图所示,在缓冲到资源数据的任何一个位置(例如末尾的时候),必须保证前面的数据已经全部获取。
总结
这种通过创建多路连接来突破传输速度而实现的网络加速方法,不需要借助额外的网络服务器,实现起来也很简单,只需要在客户端或者浏览器上进行改进。 例如,可以开发一个桌面代理软件来实现本地代理加速,也可以开发一个浏览器插件,又或者可以修改一个Chrome或者Mozzila浏览器内核,发布一个 自己的高速浏览器!
注意,此方法不能突破用户网络带宽的限制。
附件
本文所用加速工具源代码及Win32可执行文件下载:
httpspeeder_110402
包含文件:
│ httpSpeeder.exe │ pthreadGC2.dll │ readme.txt │ └─src config.cpp config.h contentbuffer.cpp contentbuffer.h cppthread.cpp cppthread.h filelog.cpp filelog.h httpconnection.cpp httpconnection.h httpmessage.cpp httpmessage.h httprequest.cpp httprequest.h httpresponse.cpp httpresponse.h httpserver.cpp httpserver.h httpshrimp.cpp httpshrimp.h httpsocket.cpp httpsocket.h httpSpeeder.mk httpSpeeder.project main.cpp
另外,补充一下,用电信专线下载同样大小的文件,
单线程:
8线程:
这下子又没有8倍提速是因为受到xiaoxia.org的服务器输出带宽的限制,不能再提高了!
来源:http://xiaoxia.org/2011/04/02/using-multi-thread-transmission-principle-to-realize-the-network-acceleration/
技术上无问题,但出于道德上的考虑应该避免。
多线程下载和突墙毕竟不是一回事。这样做的实质只是抢夺了别人的资源而已,如果普及了大家都用只会更糟。
IDM 就是8倍提速
不过楼主用在浏览器上 可能会引起部分网站强制关闭链接
IDM8线程技术已经引起一部分网站的反感了
其实现实中已经有了
佩服作者的大才啊
IDM 就是8线程下载
网上有cracked版本
其它操作系统可以吗?
应该能,你问原文作者吧
无法下载啦
感谢提示,已修复,请重新下载