VLESS Bridge
это может помочь сделать это? падает сервер, плагин переключает)
изменение, пере подключение сервера с наименьшим пингом, если сервис остановился или не доступен?
javascript// Список ваших VLESS серверов/конфигов (подгружается из настроек плагина)
let vlessServers = [
{ id: 1, name: "Server_1", url: "vless://...", pingUrl: "http://1.1.1" },
{ id: 2, name: "Server_2", url: "vless://...", pingUrl: "http://8.8.8" }
];
let currentServerIndex = 0;
// 1. Функция замера пинга до сервера
async function checkPing(server) {
const startTime = performance.now();
try {
// Делаем легкий запрос с жестким таймаутом в 2 секунды
const controller = new AbortController();
const id = setTimeout(() => controller.abort(), 2000);
await fetch(server.pingUrl, { method: 'HEAD', mode: 'no-cors', signal: controller.signal });
clearTimeout(id);
return performance.now() - startTime; // Возвращает пинг в мс
} catch (e) {
return Infinity; // Если сервер лежит или таймаут — пинг бесконечен
}
}
// 2. Функция поиска лучшего сервера и переподключения
async function autoSwitchBestServer() {
console.log("Текущий сервер недоступен. Ищем замену с наименьшим пингом...");
let bestServerIndex = -1;
let minPing = Infinity;
// Опрашиваем все серверы параллельно
const pingPromises = vlessServers.map(async (server, index) => {
let ping = await checkPing(server);
if (ping < minPing) {
minPing = ping;
bestServerIndex = index;
}
});
await Promise.all(pingPromises);
// Если рабочий сервер найден, отдаем команду нативному хелперу
if (bestServerIndex !== -1 && minPing !== Infinity) {
currentServerIndex = bestServerIndex;
let activeServer = vlessServers[currentServerIndex];
console.log(`Переключаемся на ${activeServer.name} (Пинг: ${Math.round(minPing)}мс)`);
// Отправка команды во внешний хелпер через Native Messaging
chrome.runtime.sendNativeMessage('com.vlessbridge.helper', {
command: "start_tunnel",
config: activeServer.url
}, (response) => {
if (chrome.runtime.lastError) {
console.error("Ошибка отправки команды хелперу:", chrome.runtime.lastError.message);
}
});
} else {
console.error("Все VLESS-серверы недоступны!");
}
}
// 3. Мониторинг падения сервиса (запускается, например, каждые 15 секунд)
setInterval(async () => {
let currentServer = vlessServers[currentServerIndex];
let currentPing = await checkPing(currentServer);
// Если текущий сервер выдал ошибку (Infinity) или пинг стал критическим (>1500мс)
if (currentPing === Infinity || currentPing > 1500) {
await autoSwitchBestServer();
}
}, 15000);