Kuidas teha PHP abil globaalsetele serveritele pingi teste?
Kaalun hiljuti oma kolmanda VPS-serveri ostmist ja pingi kiirus on üks murekohti. Mul on suhteliselt kõrge ping (umbes 250 ms) Ühendkuningriigist Singapuris asuvasse serverisse, mis muudab SSH-konsoolis käskude tippimise pisut ebameeldivaks.
Õnneks pakuvad mõned VPS-i pakkujad, nt Vultr, oma 15 asukoha jaoks IP-aadresse, nii et saate testida pingi kiirust. Kuidas seda automaatselt teha ilma iga kord ping – käsku tippimata?
vultr serveri asukohad kogu maailmas
Selleks võite leida PHP skripti näidise :
<?php
// <a class="vglnk" target="_blank" href="https://helloacm.com/how-to-make-ping-tests-to-global-servers-using-php/" rel="nofollow"><span>https</span><span>://</span><span>helloacm</span><span>.</span><span>com</span><span>/</span><span>how</span><span>-</span><span>to</span><span>-</span><span>make</span><span>-</span><span>ping</span><span>-</span><span>tests</span><span>-</span><span>to</span><span>-</span><span>global</span><span>-</span><span>servers</span><span>-</span><span>using</span><span>-</span><span>php</span><span>/</span></a>
// server name and their IP
$server = array(
"Frankfurt DE" => "108.61.210.117",
"Amsterdam, NL" => "108.61.198.102",
"Paris, France" => "108.61.209.127",
"London, UK" => "108.61.196.101",
"Tokyo, Japan" => "108.61.201.151",
"Singapore" => "45.32.100.168",
"New York (NJ)" => "108.61.149.182",
"Chicago, Illinois" => "107.191.51.12",
"Seattle, Washington" => "108.61.194.105",
"Atlanta, Georgia" => "108.61.193.166",
"Silicon Valley, California" => "104.156.230.107",
"Dallas, Texas" => "108.61.224.175",
"Miami, Florida" => "104.156.244.232",
"Los Angeles, California" => "108.61.219.200",
"Sydney, Australia" => "108.61.212.117"
);
// store sorted results
$result = array();
foreach ($server as $name => $ip) {
// exec runs the command and capture the last line of output
$output = exec("ping -c 3 $ip");
if (preg_match("/rtt min/avg/max/mdev = ([0-9]+.[0-9]+)/([0-9]+.[0-9]+)/([0-9]+.[0-9]+)(.*)/", $output, $match)) {
// calculate the ping as the average of three ms in last line
$ping = ((float)$match[1] + (float)$match[2] + (float)$match[3]) / 3;
$result[$name] = $ping;
}
}
// sorted from the smallest ping to highest
asort($result);
foreach ($result as $name => $ping) {
echo "$name - $ping msn";
}
Selle käepärase PHP-skripti põhiolemus on kasutada exec – funktsiooni, mis käivitab välise käsu ping ja tagastab selle väljundi viimase rea.
root@happyukgo:/var/www/vultr$ ping -c 3 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.039 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.041 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.038 ms
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.038/0.039/0.041/0.005 ms
Seejärel kasutame väljundstringi põhjal regex-testijat preg_match ja arvutame nende 3 pingi keskmise. Lõpuks sorteerime massiivi väärtuste järgi. Allpool viiakse läbi kiirustestid Ühendkuningriigist, USA-st ja Singapurist ülemaailmsetesse asukohtadesse ning on üllatav, et USA (ida) ja Ühendkuningriigi vaheline ping on alla 80 ms.
Pingi kiirused Ühendkuningriigist ragbyst
- London, Ühendkuningriik – 6,27 ms
- Amsterdam, NL – 13,36 ms
- Pariis, Prantsusmaa – 13,39 ms
- Frankfurt DE – 19,89 ms
- New York (NJ) – 78,7 ms
- Chicago, Illinois – 92,17 ms
- Miami, Florida – 107,27 ms
- Dallas, Texas – 117,40 ms
- Seattle, Washington – 135,78 ms
- Atlanta, Georgia – 139,66 ms
- Silicon Valley, California – 156,32 ms
- Los Angeles, California – 169,51 ms
- Singapur – 191,94 ms
- Tokyo, Jaapan – 229,30 ms
- Sydney, Austraalia – 291,34 ms
Ping Speeds New Yorgist, USA idaosas
- New York (NJ) – 0,36 ms
- Atlanta, Georgia – 19,04 ms
- Chicago, Illinois – 20,94 ms
- Miami, Florida – 32,36 ms
- Dallas, Texas – 42,35 ms
- Seattle, Washington – 62,0433 ms
- London, Ühendkuningriik – 67,52 ms
- Los Angeles, California – 70,68 ms
- Frankfurt DE – 78,54 ms
- Pariis, Prantsusmaa – 79,47 ms
- Silicon Valley, California – 79,841 ms
- Amsterdam, NL – 80,65 ms
- Tokyo, Jaapan – 162,70 ms
- Sydney, Austraalia – 217,58 ms
- Singapur – 231,35 ms
Ping Speeds Singapurist
- Singapur – 0,53 ms
- Tokyo, Jaapan – 77,10 ms
- Silicon Valley, California – 170,44 ms
- Los Angeles, California – 177,97 ms
- Frankfurt DE – 182,87 ms
- London, Ühendkuningriik – 184,52 ms
- Seattle, Washington – 187,12 ms
- Sydney, Austraalia – 189,44 ms
- Dallas, Texas – 202,88 ms
- Chicago, Illinois – 218,10 ms
- New York (NJ) – 229,11 ms
- Atlanta, Georgia – 240,88 ms
- Miami, Florida – 245,59 ms
- Pariis, Prantsusmaa – 256,78 ms
- Amsterdam, NL – 326,08 ms
Ping Speeds Vermontist, USA lääneosast
- Silicon Valley, California – 1,70 ms
- Los Angeles, California – 8,37 ms
- Seattle, Washington – 19,55 ms
- Dallas, Texas – 40,36 ms
- Chicago, Illinois – 54,36 ms
- Atlanta, Georgia – 63,63 ms
- New York (NJ) – 74,56 ms
- Miami, Florida – 88,70 ms
- Tokyo, Jaapan – 109,07 ms
- London, Ühendkuningriik – 139,23 ms
- Amsterdam, NL – 144,52 ms
- Sydney, Austraalia – 157,04 ms
- Pariis, Prantsusmaa – 159,29 ms
- Frankfurt DE – 161,55 ms
- Singapur – 171,10 ms
Ping Speeds Tokyost, Jaapanist
- Tokyo, Jaapan – 1,018 ms
- Singapur – 77,32 ms
- Seattle, Washington – 84,54 ms
- Silicon Valley, California – 108,94 ms
- Los Angeles, California – 110,05 ms
- Sydney, Austraalia – 114,74 ms
- Chicago, Illinois – 146,85 ms
- Dallas, Texas – 155,129 ms
- Atlanta, Georgia – 163,17 ms
- New York (NJ) – 170,06 ms
- Miami, Florida – 174,35 ms
- London, Ühendkuningriik – 229,86 ms
- Frankfurt DE – 253,58 ms
- Amsterdam, NL – 273,022 ms
- Pariis, Prantsusmaa – 287,42 ms
Seejärel saate lisada väikese projekti, jälgides neid pingi väärtusi päevast päeva, nt kasutades crontabit, ja salvestades selle andmebaasi …
Võite eeldada, et pingi kiirus on sarnane (kahesuunaline), kui vahetate allika ja sihtmärgi. Pange tähele ka seda, et turvalisuse huvides lülitage oma PING-teenused välja, kui olete ühenduse kiirust rõõmuga teada saanud.
Seda lehte värskendatakse ebaregulaarselt värskendatud serverite ja pingikiirusega.