修复无法下载资源

This commit is contained in:
HDTianRu 2024-08-18 15:18:32 +08:00
parent c71cb5a7f4
commit bd7ad919a8

View file

@ -1,29 +1,27 @@
import http from 'http';
import https from 'https';
export async function checkLatency(url) {
let request = http;
if (url.startsWith('https')) {
request = https;
import fetch from 'node-fetch';
export async function checkLatency(url, timeout = 5000) {
const controller = new AbortController()
const { signal } = controller
const timeoutId = setTimeout(() => controller.abort(), timeout)
const start = Date.now()
try {
await fetch(url, { signal })
const latency = Date.now() - start
return { url, latency }
} catch (err) {
logger.debug(`下载节点 ${url} 连接失败:`, err.message)
return { url, latency: Infinity }
} finally {
clearTimeout(timeoutId)
}
return new Promise(resolve => {
const start = Date.now();
request
.get(url, res => {
res.on('data', () => {});
res.on('end', () => {
const latency = Date.now() - start;
resolve({ url, latency });
});
})
.on('error', err => {
logger.debug(`下载节点 ${url} 连接失败:`, err.message);
resolve({ url, latency: Infinity });
});
});
}
export async function findLowestLatencyUrl(urls) {
const results = await Promise.all(urls.map(checkLatency));
const results = await Promise.allSettled(urls.map(checkLatency));
const lowestLatencyResult = results.reduce((prev, curr) =>
prev.latency < curr.latency ? prev : curr
);