vue.js - 计算数据包发送/接收时间
问题描述
我正在为 webrtc 客户端使用 vue.js。我的系统有多个服务器,所以我需要选择一个并连接。我正在从我的网络服务获取服务器列表。直到这里一切都很好,我希望用户连接到最好的服务器,所以决定进行自定义 ping(我认为它称为 rtt)。总而言之,我的目标是向服务器发送一个 udp 数据包(长发送时间),然后服务器接收到这个数据包,现在服务器向我发送一个数据包(长接收时间)=> 这个服务器 ping 是接收时间 - 发送时间
所以我将为每台服务器执行此操作并选择最佳服务器。是否可以发送和接收 udp 数据包或任何人有更好的主意?
解决方案
在我看来,最简单的方法是向每个 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);
}
});
看看它,看看它是否适合您的需求!对我来说,这似乎是最简单、最快捷的方式,无需任何计算,而且您会在第一个请求解决后立即获得结果,这样您就不必等待每个请求都解决。
推荐阅读
- outlook - 最新的 Outlook“编辑重复”控件 ID
- php - 尝试访问 admin-ajax.php 但失败
- git - git clone 不会下载所有文件
- php - 您如何在 PHP 中使用 Google Firestore 中的“字节”数据类型?
- php - 为什么联系表格中的标签不起作用?
- sql - 使用 App Insights 设置高级 SQL 跟踪
- jestjs - 使用 Jest、useRouteMatch、react-route-dom 进行动态测试
- postgresql - 自动清空后的索引大小
- c# - 用户点击提交按钮后,如何从文本框中检索用户输入?
- node.js - NodeJS 中的 API Gmail:(节点:14592)UnhandledPromiseRejectionWarning:错误:委派被拒绝