Java 用 http 传输文件速度很慢,请问各位大神有什么好办法么

2021-10-19 19:37:15 +08:00
 heavyrainn

小弟正在用 java(kotlin)做一个基于 HTTP 的数据传输工具,部分情况可能会需要传输比较大的文件(大于 10G )。目前 server 端使用 commons-fileupload-1.4 包,client 端使用 httpclient 工具。测试下来发现虽然能传,但是速度非常慢,localhost 传输只有不到 20M/S 。请问各位这里有什么好的传输性能好的手段么?

HTTP 传输为硬性条件,没办法使用 SFTP 、FTP 等其他传输协议,悲剧…

4524 次点击
所在节点    程序员
27 条回复
keakon
2021-10-20 11:22:34 +08:00
也可能是硬盘慢。。
ikas
2021-10-20 14:06:57 +08:00
commons-fileupload-1.4 这种接收上传需要写临时文件,然后再复制..太多浪费性能的地方了

前端直接用 js 发送 byte 数据.后端直接 inputstream 接收,直接写.
你要更快,那就是自己分段发送
aitaii
2021-10-20 14:29:00 +08:00
抛开硬件谈优化的意义不大
x940727
2021-10-20 15:56:27 +08:00
先确定到底是哪个限制了只有 20M 的速度,是硬盘吗?你可以直接把 10G 的文件全部加载到内存里面再传。
lisongeee
2021-10-20 17:15:42 +08:00
使用 http3
youxiachai
2021-10-20 17:53:58 +08:00
我觉得..没说用啥 io..讨论这个意义不大
heavyrainn
2021-10-22 16:24:46 +08:00
统一回复一下吧,因为我的场景是 localhost 传,可能我有一点没有说清楚,我 localhost 走下载方法的时候速度是可以达到 200M/S 的。所以并不是网络的问题。推测问题应该是我使用的 commons-fileupload-1.4 包上。用这个包的原因是,我使用 javalin 框架,javalin 框架的文件上传功能有问题,一旦数据过大会导致直接报内存爆炸报错。
后来呢…后来我只好换了个框架,改成了 kotlin 自己的 ktor 框架,然后速度一下就飚上去了…ktor 写起来也挺舒服的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/808987

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX