多线程传输对访问网页或下载文件加速

原理:

把一些多线程的下载技术(例如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

包含文件:

│  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/

发表评论

电子邮件地址不会被公开。 必填项已用*标注