本文提及的的多线程传输指多通道传输。
原理:
把一些多线程的下载技术(例如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可执行文件下载:http://xiaoxia.org/upfiles/2011/04/httpspeeder_110402.zip
包含文件:
│ 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
来源:http://xiaoxia.org/2011/04/02/using-multi-thread-transmission-principle-to-realize-the-network-acceleration/
原理:
把一些多线程的下载技术(例如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可执行文件下载:http://xiaoxia.org/upfiles/2011/04/httpspeeder_110402.zip
包含文件:
│ 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
来源:http://xiaoxia.org/2011/04/02/using-multi-thread-transmission-principle-to-realize-the-network-acceleration/
No comments:
Post a Comment