繁体   English   中英

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

[英]Sort a list of servers by fastest ping time with Javascript

在我的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时间。 我发现了几个包装ping实用程序的库( net-pingping )。 但是,它们使用回调(考虑到对服务器执行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??
    });
});

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

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

您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM