[英]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-ping和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??
});
});
我曾考慮過讓回調更新全局列表,但是一旦所有服務器都經過測試,我就需要發出某種信號。
任何指導表示贊賞。 謝謝!
您可以使用Promise.all
並map
以遍歷服務器列表,並等待所有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.