首页 > 解决方案 > 计算数据包发送/接收时间

问题描述

我正在为 webrtc 客户端使用 vue.js。我的系统有多个服务器,所以我需要选择一个并连接。我正在从我的网络服务获取服务器列表。直到这里一切都很好,我希望用户连接到最好的服务器,所以决定进行自定义 ping(我认为它称为 rtt)。总而言之,我的目标是向服务器发送一个 udp 数据包(长发送时间),然后服务器接收到这个数据包,现在服务器向我发送一个数据包(长接收时间)=> 这个服务器 ping 是接收时间 - 发送时间

所以我将为每台服务器执行此操作并选择最佳服务器。是否可以发送和接收 udp 数据包或任何人有更好的主意?

标签: vue.jswebrtcload-balancingping

解决方案


在我看来,最简单的方法是向每个 url 发出 get 请求,然后对请求进行promise 竞赛,返回最快的是您将使用的服务器。

const urls = ['https://www.google.com/', 'https://www.facebook.com/', 'https://www.twitter.com/', 'https://www.instagram.com/'];

const serverPromises = [];

urls.forEach((url) => {
  serverPromises.push(
    new Promise((resolve, reject) => {
      fetch(url, {
        mode: 'no-cors'
      }).then((response) => {
        if ([400, 500, 404].includes(response.status)) {
          return reject(null);
        }
        return resolve(url);
      })
    })
  );
});

Promise.race(serverPromises).then((url) => {
  if (url) {
    console.log('URL to use: ', url);
  }
});

看看它,看看它是否适合您的需求!对我来说,这似乎是最简单、最快捷的方式,无需任何计算,而且您会在第一个请求解决后立即获得结果,这样您就不必等待每个请求都解决。


推荐阅读