首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java优化网络速度

使用Java优化网络速度
EN

Stack Overflow用户
提问于 2013-04-29 01:41:51
回答 2查看 348关注 0票数 0

有两个目录(本地和远程)。目录是同步的。我不想拖慢网络的速度。我想对速度使用动态限制。因此,我应该确定网络速度(用于上传)。

如何确定网速(上传时)?有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-09 19:30:45

我的问题解决了。我希望瞬时确定网络速度,并对每个上传文件(或下载文件)使用动态速度限制(例如:降低%50 )。例如,如果我的上传速度为每秒100kb,则动态上传速度应为每秒50kb,如果上传速度为每秒150kb,则动态上传速度应为每秒75kb。

因此,我上传了我的第一个文件包,并确定了bytes per second。这是我的上传速度。然后,确定我的动态限制(limit = myUploadSpeed %50)。然后,计算睡眠持续时间(sleep_duration=((myUploadSpeed-limit)/limit)*1000) (有1000个可以从毫秒转换为秒)。对于发送到下一个数据包的每个数据包,等待if (limit>bytesPerSecond),直到sleep_duration

我的代码限制如下:

代码语言:javascript
复制
private void throttle() throws IOException {
      long limit= calculateMaxBytesPerSecond();
      long bytePerSec= getBytesPerSec();
    if (limit!=-1 && bytePerSec > limit) {

        long sleep_duration=((bytePerSec-limit)/limit)*1000;

      try {
          if(sleep_duration==0)
              Thread.sleep(1000);
          else
              Thread.sleep(sleep_duration);

        totalSleepTime += SLEEP_DURATION_MS;
      } catch (InterruptedException e) {
        throw new IOException("Thread aborted", e);
      }
    }
  }

private long calculateMaxBytesPerSecond() {
      switch (streamType) {
    case 0:
        if(connectionManager.getDownloadSpeedLimit()>0)
            return connectionManager.getDownloadSpeedLimit() / downloadManager.getTaskCount();
        else
            return -1;

    case 1:
        if(connectionManager.getUploadSpeedLimit()>0)
            return connectionManager.getUploadSpeedLimit() / uploadManager.getTaskCount();
        else
            return -1;
    }

    return Long.MAX_VALUE;
  }

public long getBytesPerSec() {
    long elapsed = (System.currentTimeMillis() - startTime) / 1000;
    if (elapsed == 0) {
      return bytesRead;
    } else {
      return bytesRead / elapsed;
    }
  }
票数 0
EN

Stack Overflow用户

发布于 2013-04-29 01:44:09

如果您想每秒发送X MB,请发送X MB,如果不到一秒,请等到第二秒结束。要确定您发送的数据量,请在每次发送数据时都保留一个计数器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16265754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档