当前位置: 首页 > 面试题库 >

限制Java上载速度?

郎吉星
2023-03-14
问题内容

我想以编程方式限制Java中的上传或下载操作。我假设我需要做的就是检查上传进行的速度并按以下方式进行相应插入Thread.sleep()

while (file.hasMoreLines()) {
    String line = file.readLine();
    for (int i = 0; i < line.length(); i+=128) {
        outputStream.writeBytes(line.substr(i, i+128).getBytes());
        if (isHittingLimit())
            Thread.sleep(500);
    }
}

上面的代码能用吗?如果没有,还有更好的方法吗?是否有描述理论的教程


问题答案:

令牌桶算法是一种限制上传或下载带宽的方法。您应该阅读本文:它解释了此算法的用法。

使用番石榴RateLimiter:

// rate = 512 permits per second or 512 bytes per second in this case
final RateLimiter rateLimiter = RateLimiter.create(512.0);

while (file.hasMoreLines()) {
    String line = file.readLine();
    for (int i = 0; i < line.length(); i+=128) {
        byte[] bytes = line.substr(i, i+128).getBytes();
        rateLimiter.acquire(bytes.length);
        outputStream.writeBytes(bytes);
    }
}

如Guava文档中所述:
重要的是要注意,所请求的许可数量永远不会影响请求本身的节流(对acquire(1)的调用和对acquire(1000)的调用将导致完全相同的节流,如果任何),但会影响下一个请求的限制。
即,如果一个昂贵的任务到达一个空闲的RateLimiter,它将立即被授予,但是下一个请求将受到额外的限制,从而支付了昂贵任务的成本。



 类似资料:
  • 问题内容: 我将作为个人练习用Java实现一个(简单的)下载器应用程序。它将在不同的线程中运行多个作业,以这种方式,我将在执行期间始终同时下载几个文件。 我希望能够定义在所有下载作业之间共享的下载速率限制,但是我不知道如何执行单个下载任务。我应该怎么做呢?我应该尝试实施哪些解决方案? 谢谢。 问题答案: 我将从管理所有下载的DownloadManager开始。 希望参与托管带宽的所有代码都将在开始

  • 问题内容: 在golang中如何限制服务器上载和下载的速度? 我正在编写golang服务器,以允许用户上载和下载文件。而且文件很大,大约1GB字节。我想将上传和下载速度限制为(例如)1MB / s(当然可以配置)。 以下是我的上传代码: 问题答案: 有一个 令牌桶算法可以帮助实现这样的速率限制。我找到了一个示例实现,您可以使用它: https //github.com/juju/ratelimit

  • 本文向大家介绍php限制文件下载速度的代码,包括了php限制文件下载速度的代码的使用技巧和注意事项,需要的朋友参考一下 有时候你会出于某种目的而要求把下载文件的速度放慢一些,例如你想实现文件下载进度条功能。限制下载速度最大的好处是节省带宽,避免瞬时流量过大而造成网络堵塞。本文将和你分享如何通过php代码来实现限制文件的下载速度。 首先来看看利用php限制文件下载速度的代码: 下面对以上代码做一些分

  • 速率限制配置参考 filter.http.RateLimit filter.http.RateLimit proto { "domain": "...", "stage": "...", "request_type": "...", "timeout": "{...}" } domain (string, REQUIRED) 需要调用速率限制服务时的域。 stage (uint3

  • 速率限制配置参考。 filter.network.RateLimit filter.network.RateLimit proto { "stat_prefix": "...", "domain": "...", "descriptors": [], "timeout": "{...}" } stat_prefix (string, REQUIRED) 发布统计信息时使用的前缀。

  • 速率限制配置概述。 { "name": "rate_limit", "config": { "domain": "...", "stage": "...", "request_type": "...", "timeout_ms": "..." } } domain (required, string) 调用速率限制服务时使用的域。 stage (opt