• B/S架构 网络上行速率的获取


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 漫天啊 2024-04-17 14:07 采纳率: 73.3% 浏览 1 首页/ 运维 / B/S架构 网络上行速率的获取 服务器javaspring boot 利用SpringBoot框架和B/S架构,获取网络的上行速率,怎么样获取?我之前前端利用input type=file,后端通过transferTo方法,将浏览器的文件保存在服务器中,通过传输时间和文件大小来计算上行速率,最后发现文件的上传没有问题,但是上传速率离奇的快(本人网速偏低),所以是否是因为transferTo方法不经过网络,计算上行速率是有问题的?我该采用什么方式计算上行速率呢(以上浏览器和服务器均处于同一局域网下,必要时利用FTP也可以) 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    4条回答 默认 最新

    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-17 14:07
      关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      在B/S架构中,获取网络的上行速率可以通过以下方式实现:

      1. 使用浏览器端的JavaScript来获取网络的上行速率。可以通过测量文件上传的时间来计算上传速率。具体步骤如下:
      • 在前端页面中添加一个隐藏的iframe元素,用于实现文件上传。
      • 使用JavaScript来控制文件上传的时间,并统计文件大小。
      • 根据上传时间和文件大小来计算上行速率。
      1. 使用后端的Spring Boot框架来获取网络的上行速率。以下是一个基本的实现步骤:
      • 在Spring Boot的Controller中,使用MultipartHttpServletRequest对象来处理文件上传。
      • 在处理文件上传的方法中,使用InputStream和OutputStream来读取和写入文件数据。
      • 计算文件上传时间,并根据文件大小来计算上行速率。

      无论使用哪种方法,都需要注意以下几点:

      • 确保浏览器和服务器之间的网络连接是稳定的,以减少上传速率的波动。
      • 确保服务器的网络连接速度足够快,以避免上传速率受到限制。
      • 在计算上传速率时,要考虑网络传输中可能存在的延迟和丢包等因素。
      • 如果上传文件较大,可以使用多线程或分块上传的方式来提高上传速率。
      评论
    • 码农阿豪 Java领域优质创作者 2024-04-17 14:07
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      针对这个问题,如果希望准确地获取网络的上行速率,可以通过以下步骤来实现:
      1. 在客户端javascript代码中,利用XMLHttpRequest对象发送数据到服务器端,可以通过监听onprogress事件来获取数据的传输速度,进而计算出上传速率。 示例如下:
      var xhr = new XMLHttpRequest();
      xhr.upload.addEventListener("progress", function(event) {
        if (event.lengthComputable) {
          var percentComplete = event.loaded / event.total;
          var uploadSpeed = event.loaded / (event.timeStamp - startTime) * 1000; // 上传速率
        }
      }, false);
      xhr.open('POST', 'http://localhost:8080/upload', true);
      xhr.send(formData);
      var startTime = new Date().getTime(); // 开始上传的时间
      
      1. 在服务器端,可以利用SpringBoot框架中的MultipartResolver组件来处理文件上传,这样可以避免手动解析multipart/form-data格式的数据。在获取上传文件的InputStream对象后,可以通过IOUtils.copy()方法来复制输入流并统计上传数据的量和时间,从而计算上传速率。 示例如下:
      @PostMapping("/upload")
      public String upload(@RequestParam("file") MultipartFile file) throws IOException {
        InputStream in = file.getInputStream();
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        long startTime = System.currentTimeMillis();
        long totalBytes = IOUtils.copyLarge(in, out);
        long endTime = System.currentTimeMillis();
        double duration = (double) (endTime - startTime) / 1000;
        double uploadSpeed = totalBytes / duration * 8 / 1024 / 1024; // mbps
        return "Upload speed: " + uploadSpeed + " Mbps";
      }
      

      其中,MultipartResolver组件的配置可以在SpringBoot的application.properties文件中添加如下配置:

      spring.servlet.multipart.enabled=true
      spring.servlet.multipart.max-file-size=1MB
      spring.servlet.multipart.max-request-size=10MB
      

      这样,对于上传文件大小不超过1MB的请求,都会被解析成MultipartFile对象,并传递给upload()方法进行处理。 需要注意的是,以上示例中计算上传速率的单位为Mbps(兆比特每秒),可以根据需要进行调整。另外,对于上传文件大小较大的情况,可以考虑使用分块上传的方式,以提高上传速率和稳定性。

      展开全部

      评论
    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-17 14:08
      关注

      引自免费微信小程序:皆我百晓生

      要获取B/S架构中客户端到服务器的上行速率,我们可以使用JavaScript在浏览器端进行实时测量。由于transferTo方法是服务器操作,它不涉及网络传输速度的计算,因此我们需要在客户端计算。

      首先,在前端,我们可以创建一个简单的HTML页面,包含一个文件选择按钮和一个显示上传进度的元素。这里是一个基本的HTML结构示例:

      
      
      
          
          
          Upload Speed Test
      
      
          

      Upload Speed Test

      Upload speed: N/A

      然后,在speed-test.js中,我们将实现文件上传并计算上行速率的功能:

      document.getElementById('fileInput').addEventListener('change', function(e) {
          const file = e.target.files[0];
          if (!file) return;
      
          const formData = new FormData();
          formData.append('file', file);
      
          const xhr = new XMLHttpRequest();
          xhr.open('POST', '/upload');
          xhr.upload.onprogress = function(event) {
              if (event.lengthComputable) {
                  const loaded = event.loaded;
                  const total = event.total;
                  const speed = Math.round((loaded / 1024 / 1024) / ((event.loaded || event.position) / 1024 / 1024) * 100) / 100; // Mbps
                  document.getElementById('uploadSpeed').innerText = `Upload speed: ${speed.toFixed(2)} Mbps`;
              }
          };
          xhr.onloadend = function() {
              document.getElementById('uploadSpeed').innerText = 'Upload complete';
          };
      
          xhr.send(formData);
      });
      

      接下来,在后端,我们使用Spring Boot处理文件上传请求。首先,添加一个用于接收文件的控制器:

      import org.springframework.web.bind.annotation.PostMapping;
      import org.springframework.web.bind.annotation.RequestParam;
      import org.springframework.web.multipart.MultipartFile;
      
      import java.io.IOException;
      import java.nio.file.Files;
      import java.nio.file.Path;
      import java.nio.file.Paths;
      
      @RestController
      public class UploadController {
      
          @PostMapping("/upload")
          public void handleFileUpload(@RequestParam("file") MultipartFile file) throws IOException {
              Path targetPath = Paths.get("target/uploads", file.getOriginalFilename());
              Files.write(targetPath, file.getBytes());
          }
      }
      

      这个例子中,我们只是简单地将文件写入服务器本地磁盘。实际应用中,您可能需要根据需求对文件进行更复杂的处理,例如存储到云存储服务等。

      这样,当用户选择文件并开始上传时,前端会实时更新上传速度到页面上。同时,文件也在后台被上传到服务器。这种方法可以更准确地反映从客户端到服务器的实际上行速率。注意,这仅适用于同一个局域网内的测试,因为不同网络环境下的速度可能会受到其他因素影响。

      展开全部

      评论
    • GISer Liu 2024-04-17 14:26
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      首先,感谢您的详细描述。您遇到的问题涉及到网络上行速率的获取,在B/S架构下,利用Spring
      Boot框架。您之前尝试通过传输文件的方式计算上行速率,但遇到了速率异常快的情况,可能是因为transferTo方法不经过网络,导致计算上行速率不准确。
      针对您的问题,我提出以下解决思路与方案:

      问题分析:

      1. 传输方式问题 :transferTo方法在本地文件系统中进行文件传输,不经过网络,因此无法准确计算上行速率。
      2. 精准计算上行速率 :需要在网络层面准确获取上传文件的时间和大小,才能计算出真实的上行速率。

        解决方案:

      3. 利用网络抓包工具 :您可以使用网络抓包工具(如Wireshark)来捕获文件上传时的网络数据包。通过分析数据包的时间戳和大小,可以准确计算出上传速率。
      4. 服务端记录时间 :在Spring Boot后端,可以记录文件开始上传和结束上传的时间戳,并计算文件大小,从而得到上传速率。
      5. 客户端JavaScript计时 :在前端页面,使用JavaScript记录文件上传的开始时间和结束时间,并计算文件大小,然后将这些数据发送给后端进行计算。
      6. FTP上传监控 :如果您考虑使用FTP进行文件上传,可以在FTP服务器端或客户端进行监控,记录上传开始和结束时间,并计算文件大小,以获取上传速率。

        代码示例:

        后端(Spring Boot):

        javaCopy code
        // 在Controller中记录上传开始时间
        long startTime = System.currentTimeMillis();
        // 上传文件操作
        // 在文件上传完成后
        long endTime = System.currentTimeMillis();
        long uploadTime = endTime - startTime;
        long fileSize = uploadedFile.getSize();
        double uploadSpeed = (fileSize / uploadTime) * 1000; // 单位为 bytes/s
        

        前端(JavaScript):

        javascriptCopy code
        // 在文件上传开始时记录时间
        var startTime = new Date().getTime();
        // 文件上传操作
        // 在文件上传完成后
        var endTime = new Date().getTime();
        var uploadTime = endTime - startTime;
        var fileSize = uploadedFileSize; // 获取文件大小
        var uploadSpeed = (fileSize / uploadTime) * 1000; // 单位为 bytes/s
        
        这些方案可以帮助您准确获取文件上传的上行速率。如果您有任何进一步的问题或需要更多帮助,请随时提问!

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    panads操作excel
    经典算法学习之---折半插入排序
    c++颜色空间转换
    1375. 二进制字符串前缀一致的次数-前序遍历法
    Python--文件和异常
    怎样将例化的uvn test包含在verdi的instance中,并将其中变量加入到dump的波形中(方便verdi追test以及debug)
    GuavaCache学习三种过期策略的学习
    知乎转发最高的 Java 面试成神笔记,GitHub 已下载量已过百万
    强化学习总结1 马尔科夫过程
    Web自动化——python
  • 原文地址:https://ask.csdn.net/questions/8089958