2013-05-15 76 views
-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中創建一個類似的事情?

+2

JavaScript不能調用外部域,除非它們啓用了CORS。創建一個web服務,通​​過Ajax調用您的服務器可以獲得狀態。 – epascarello

+0

@epascarello:這不完全正確,有像JSONP這樣的解決方法。但是,除了在我的世界服務器暴露HTTP接口,從JavaScript(CORS或JSONP)這樣做的機率很低... –

+0

我@epascarello同意,AJAX是去這裏的路。一個合理連接的服務器可以非常快地完成一組ping。 – halfer

回答

1

在您的位置,我可能會設置一個腳本,該腳本在被調用時會ping選定的服務器並打印可解析的結果,然後在需要發送ping時使用Ajax調用該腳本。