Сортировка списка серверов по быстрому пинг с Javascript - PullRequest
0 голосов
/ 25 июня 2018

В моем приложении Electron у меня есть список адресов серверов, которые мне нужно отсортировать по кратчайшему времени отклика. У меня есть функция, которая нуждается в отсортированном списке:

function start() {
    // first step, get list of servers
    var servers_sorted = get_sorted_list_of_servers();

    // rest of function
}

Тогда у меня есть функция, которая перебирает список серверов:

function get_sorted_list_of_servers() {
    // access unsorted list from file

    unsorted_servers.forEach((server) => {
        // Get ping times for each server
        // Here is where I am stuck
    });

    // Sort based on ping times....

    return sorted_list_of_servers;
}

Проблема в том, что я не уверен, как получить время пинга для каждого сервера. Я нашел пару библиотек, которые обертывают утилиту ping ( net-ping и ping ). Однако они используют обратные вызовы (что имеет смысл, учитывая, что проверка связи с сервером может занять минуту), и мне нужен какой-то способ получения списка времени сервера.

// From ping example code
unsorted_servers.forEach(function (server) {
    ping.promise.probe(host).then(function (res) {
        console.log(res);
        // Update a global variable here??
    });
});

Я думал о том, чтобы позволить обратным вызовам обновить глобальный список, но затем мне нужен какой-то способ сигнализации, когда все серверы будут протестированы.

Любое руководство приветствуется. Спасибо!

1 Ответ

0 голосов
/ 25 июня 2018

Вы можете использовать Promise.all и map, чтобы перебрать список серверов и дождаться разрешения всех Обещаний.Вот быстрый пример использования ping:

const sortBy = require('lodash.sortby');
const ping = require('ping');

const servers = ['google.com', 'facebook.com', 'amazon.com', 'apple.com'];

Promise.all(servers.map(server => ping.promise.probe(server))).then(response => {
  console.log(sortBy(response, 'time'))
});

Вот демонстрационная версия React с использованием Promise.all и рендерингом результатов:

https://server -ping-fuupenayzp.now.sh /

и источник

https://zeit.co/rusty-dev/server-ping/fuupenayzp/source?f=src/App.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...