使用Javascript通过最快的ping时间对服务器列表进行排序

时间:2018-06-25 15:47:14

标签: javascript node.js electron

在我的Electron应用程序中,我有一个服务器地址列表,需要根据最短的响应时间对其进行排序。我有一个需要排序列表的函数:

[int]$int = 02
$int.ToString("00")

然后我有一个遍历服务器列表的函数:

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

    // rest of function
}

问题是我不确定如何获取每个服务器的ping时间。我发现了几个包装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; } 实用程序的库(net-pingping)。但是,它们使用回调(考虑到对服务器执行ping操作可能需要一分钟,因此这很有意义),我需要某种方式来获取服务器时间列表。

ping

我已经考虑过让回调更新全局列表,但是一旦所有服务器都经过测试,我就需要某种方式发出信号。

任何指导表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用Promise.allmap遍历服务器列表,并等待所有Promises解析。这是使用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'))
});

这是一个使用Promise.all并呈现结果的React演示:

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

和来源

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