@RestController
class HelloWorldController {
@GetMapping("/")
public String sayHello() {
return "hello world";
}
@GetMapping("/download")
public ResponseEntity<Resource> download() throws FileNotFoundException {
RateLimiter rateLimiter = GuavaRateLimiter.create(52428800L, 500, TimeUnit.MILLISECONDS)
FileInputStream in = new FileInputStream("/home/hujianxin/Downloads/officesp2010-kb2687455-fullfile-x64-en-us.exe");
InputStreamResource resource = new InputStreamResource(new InputStream() {
@Override
public int read() throws IOException {
rateLimiter.acquire();
return in.read();
}
@Override
public int read(byte[] b) throws IOException {
rateLimiter.acquire(b.length);
return in.read(b);
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
rateLimiter.acquire(len);
return in.read(b, off, len);
}
});
return ResponseEntity.ok().body(resource);
}
}
在这个例子中,最大值是 50MB/S,但是实际速度只有 7M/s,如果移除限流相关代码,实际速度可以达到 200MB/s
有遇到过类似问题的大佬吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.