My 尚未发布Delphi 2010 应用程序允许用户将他们的文件上传到我的服务器。现在我使用 HTTPS POST 发送文件,(简化的)算法基本上是:
- 将文件拆分为“片”(每个片 256KB)
- 对于每个切片,将其 POST 到服务器
IE。对于 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。我一遍又一遍地使用我的分析器,除了更改上传例程本身之外,没有太多需要优化的地方。
我也在用多线程,即使我尽了最大努力优化我的代码,我的基准测试仍然告诉我我可以做得更好(还有其他经过良好优化的软件确实实现了much更好的时机...几乎是我的上传速度的两倍!)
我知道这不是我的服务器的错...以下是我仍然需要探索的想法:
我尝试将切片分组到单个 POST 中,这自然会带来性能提升 (20-35%),但恢复能力现在有所降低。
我也考虑过使用SFTP / SSH,但我不确定它是否快。
使用网络套接字实现断点续传(如该组件 http://code.google.com/p/delphionrails/),我也不确定速度。
现在我的问题是:有什么办法可以加快上传速度吗?我愿意any我可以实施的建议,包括命令行工具(如果许可证允许我将其与我的应用程序一起提供),前提是:
- 支持断点续传
- Fast!
- 合理的内存使用
- 保护并允许登录/用户身份验证
另外,出于主要的安全考虑,FTP 不是我想要实现的东西。
多谢!
我建议做一个TIdHTTP.Post()
整个文件而不对其进行分块。您可以使用TIdHTTP.OnWork...
事件来跟踪发送到服务器的字节数,以便您知道需要时从哪里恢复。恢复时,您可以使用TIdHTTP.Request.CustomHeaders
属性以包含一个自定义标头,该标头告诉服务器您要从哪里恢复,以便服务器可以在接受新数据之前将其先前的文件回滚到指定的偏移量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)