多线程FTP客户端的几个问题
项目是一个FTP客户端的浏览器插件。
1.计划使用WinInet。
2.客户端需要下载大量的图片。
3.因为上一条,打算使用FTP多线程下载,每个线程下载图片的一段偏移数据。然后组装写进磁盘。
因为以前没接触过网络方面的知识,这里请问一下:
这里FTP多个线程访问同一个数据端口的时候,是否要进行同步。或者换句话说,端口是否同时只能被一个线程访问?
恳请高人帮助。
[解决办法]
curl支持ftp。
ftp协议自身支持随机读取指定文件,多线程下载就是每个线程负责一个文件的一部分,无需同步,待所有线程任务完成则可以拼接各个文件得到完整文件。
这和http range头做多线程下载是一样的,没太多难度。
简单的架构:
主线程接受文件下载请求,libevent+pipe交给任务拆分线程池,libevent+pipe任务拆分线程池拆分任务后交给下载线程池,下载线程libevent+pipe+curl_multi_perform接受任务与并发执行若干下载任务,并将完成的任务libevent+pipe交给文件拼接线程,一旦拼接线程检测到某个文件的所有下载任务完成则进行磁盘I/O拼接,将完成事件libevent+pipe通知给主线程,一个文件下载完成。
[解决办法]
也可以看下wget源码