-1
我正在創建列出我的世界服務器的這個網站。基本上我試圖ping所有這些服務器,因爲它們顯示。用php解決這個問題並不能解決我的問題,ping所有的服務器都需要時間,而且我知道javascript可以同時執行多個「ping」。我將如何做到這一點?用javascript(無插件)平安minecraft服務器?
的PHP代碼我使用的是現在:
class minecraft_server
{
private $address;
private $port;
public function __construct($address, $port = 25565){
$this->address = $address;
$this->port = $port;
}
public function get_ping_info(&$info){
$starttime = microtime(true);
$socket = @fsockopen($this->address, $this->port, $errno, $errstr, 1.0);
$stoptime = microtime(true);
$ping = round(($stoptime-$starttime)*1000);
if ($socket === false){
return false;
}
fwrite($socket, "\xfe\x01");
$data = fread($socket, 256);
if (substr($data, 0, 1) != "\xff"){
return false;
}
if (substr($data, 3, 5) == "\x00\xa7\x00\x31\x00"){
$data = explode("\x00", mb_convert_encoding(substr($data, 15), 'UTF-8', 'UCS-2'));
}else{
$data = explode('§', mb_convert_encoding(substr($data, 3), 'UTF-8', 'UCS-2'));
}
if (count($data) == 3){
$info = array(
'version' => '1.3.2',
'motd' => $data[0],
'players' => intval($data[1]),
'max_players' => intval($data[2]),
'ping' => $ping
);
}else{
$info = array(
'version' => $data[0],
'motd' => $data[1],
'players' => intval($data[2]),
'max_players' => intval($data[3]),
'ping' => $ping
);
}
return true;
}
}
而且與您通話的功能:
$server = new minecraft_server(IP, PORT);
if (!$server->get_ping_info($info)){
echo "Offline";
}else{
print_r($info);
}
我怎麼會在JavaScript中創建一個類似的事情?
JavaScript不能調用外部域,除非它們啓用了CORS。創建一個web服務,通過Ajax調用您的服務器可以獲得狀態。 – epascarello
@epascarello:這不完全正確,有像JSONP這樣的解決方法。但是,除了在我的世界服務器暴露HTTP接口,從JavaScript(CORS或JSONP)這樣做的機率很低... –
我@epascarello同意,AJAX是去這裏的路。一個合理連接的服務器可以非常快地完成一組ping。 – halfer