【发布时间】:2012-03-17 14:50:02
【问题描述】:
我的尚未发布 Delphi 2010 应用程序允许用户将他们的文件上传到我的服务器。现在我正在使用 HTTPS POST 发送文件,(简化的)算法基本上是:
- 将文件拆分为“切片”(每个 256KB)
- 对于每个切片,将其发布到服务器
即。对于 1MB 的文件:
--> Get Slice #1 (256KB)
--> Upload Slice #1 using TidHTTP.Post()
--> Get Slice #2 (256KB)
--> Upload Slice #2 using TidHTTP.Post()
--> Get Slice #3 (256KB)
--> Upload Slice #3 using TidHTTP.Post()
--> Get Slice #4 (256KB)
--> Upload Slice #4 using TidHTTP.Post()
我正在使用 Indy 10。我(ab)一遍又一遍地使用我的分析器,除了更改上传例程本身之外,没有什么可以优化的了。
我也在使用多线程,即使我尽了最大努力优化我的代码,我的基准测试仍然告诉我我可以做得更好(还有其他优化良好的软件确实可以实现很多更好的时机...几乎是我上传程序的两倍!)
我知道这不是我的服务器的错...以下是我仍然需要探索的想法:
我尝试在单个 POST 中对切片进行分组,这自然会提高性能 (20-35%),但现在恢复能力有所降低。
我也想过使用SFTP / SSH,但我不确定它是否很快。
使用web sockets实现可恢复上传(如this component),我也不确定速度。
现在我的问题是:有什么办法可以加快上传速度吗?我愿意接受任何我可以实施的建议,包括命令行工具(如果许可证允许我将其与我的应用程序一起发布),前提是:
- 支持恢复上传
- 快!
- 合理的内存使用率
- 安全并允许登录/用户身份验证
另外,由于主要的安全问题,我不想实现 FTP。
非常感谢!
【问题讨论】:
-
传输是否使用数据压缩/解压?
-
@mjn:是的(切片在上传之前已经压缩 + 我使用 Indy 的 TIdCompressorZLib)
-
@kobik:相当简单的php代码(move_uploaded_file() + md5检查+简单的sql插入),我测量了php的时间,绝对不是瓶颈。
标签: performance delphi upload indy resume-upload