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 等其他传输协议,悲剧…

4736 次点击
所在节点    程序员
27 条回复
thetbw
2021-10-19 19:43:14 +08:00
多线程上传试试
Zuckonit
2021-10-19 19:48:10 +08:00
文件分块,然后在服务端组装
heavyrainn
2021-10-19 20:11:01 +08:00
@thetbw 请问有什么方案或者思路可以指导一下么?
yukong
2021-10-19 21:16:10 +08:00
速度慢,先看看是不是硬件条件约束,百兆网卡的速度也就 20MB/s 左右,如果要传输大于 10G 的文件,网卡建议万兆起步,其次发现如果不是硬件条件导致速度慢,那么可以尝试多线程+file shard 上传从而尽量的跑满网卡的上限。
BBCCBB
2021-10-19 21:18:26 +08:00
多线程的意思就是:

参考 http 协议里的 range , 将文件分位多段,上传后在服务器组装.
thetbw
2021-10-19 23:13:10 +08:00
@heavyrainn 下载的话 github 上就有好多多线程下载的,上传的话还真没碰见过
kaneg
2021-10-19 23:23:02 +08:00
可以查看一下几点:
1. 下载还是上传?上传与下载带宽可能不对等
2. 看服务端和客户端的 CPU 占用率
3. 用其他工具来确认服务端和客户端直接的带宽是否只有 20M
4. 是否文件读写是被磁盘速度限制。老一点的机械硬盘也就这个速度
huangsen365
2021-10-19 23:26:08 +08:00
使用阿里云的 OSS 存储,js 方式的接口
forgottencoast
2021-10-19 23:51:44 +08:00
20MB/s 吗?挺快了吧,大部分人上网的实际的上传下载速度都到不了这个级别。
ch2
2021-10-20 00:03:09 +08:00
http 可以并发上传的,range 了解一下
FindHao
2021-10-20 03:02:53 +08:00
先压缩再分块,客户端再解压缩
msg7086
2021-10-20 03:05:53 +08:00
我是头一次看到有人说 localhost 跑 20MB/s 挺快的。
wangyu17455
2021-10-20 04:01:10 +08:00
分块多线程上传
xuanbg
2021-10-20 06:38:50 +08:00
@kaneg localhost 上传和网卡网络没关系,倒是和磁盘 IO 关系很大。我估计楼主是在老旧笔记本电脑上测试的吧

建议楼主换两台好点的电脑,用个千兆网络测试一下。
aru
2021-10-20 06:50:35 +08:00
可能是你的硬盘比较慢吧,换个 ssd 试试
unco020511
2021-10-20 09:45:02 +08:00
分块后多线程呀
lusi1990
2021-10-20 10:21:18 +08:00
很有可能是网络慢,和语言关系不大
ungrown
2021-10-20 10:22:00 +08:00
有人提到磁盘慢,IO 瓶颈确实是个关键因素,在你这个测试之中。
建议先别进行磁盘读写,直接在内存中测试,看看数据块发送接收的速度,收到的数据直接丢掉不用保存。
summer2019
2021-10-20 10:40:50 +08:00
@forgottencoast localhost 啊,20M 快个鬼吧
darknoll
2021-10-20 10:41:24 +08:00
带宽是固定的,分不分块有什么区别?

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

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

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

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

© 2021 V2EX