Мониторинг сервера Minecraft



Cперва небольшая прелюдия. Для того чтобы правильно читать и воспринимать материал представленный в статьях этой категории, вам необходимы минимальные знания PHP, HTML, CSS, JS, ну и jQuery. Материал будет не самый сложный, но понять его будет невозможно без этих знаний.

Итак, в этой статье мы поговорим о том, как можно сделать статистику / мониторинг (кому как приятнее) своего сервера Minecraft. Для начала нам понадобится класс, представленный ниже. Данный класс я давно нашел, и до сих пор использую. Не помню кто автор, но надеюсь автор не обидится. Для того чтобы данный класс функционировал нормально, нам необходимо будет установить на сервер плагин под названием MineQuery, он работает в связки с буккитом, и если вы хорошо с ним знакомы, проблем с установкой не возникнет. Итак, приступим.

[php]class Minequery {

/**
* Queries a Minequery server.
*
* @static
* @param string $address The address to the Minequery server.
* @param int $port The port of the Minequery server.
* @param int $timeout The time given before the connection attempt gives up.
* @return array|bool An array on success, FALSE on failure.
*/
public static function query($address, $port = 25566, $timeout = 30) {
$query = array();

$beginning_time = microtime(true);

$socket = @fsockopen($address, $port, $errno, $errstr, $timeout);

if (!$socket) {
// Could not establish a connection to the server.
return false;
}

$end_time = microtime(true);

fwrite($socket, «QUERY\n»);

$response = «»;

while(!feof($socket)) {
$response .= fgets($socket, 1024);
}

$response = explode(«\n», $response);

// Server port
$query[‘serverPort’] = explode(» «, $response[0], 2);
$query[‘serverPort’] = $query[‘serverPort’][1];

// Player count
$query[‘playerCount’] = explode(» «, $response[1], 2);
$query[‘playerCount’] = $query[‘playerCount’][1];

// Max players
$query[‘maxPlayers’] = explode(» «, $response[2], 2);
$query[‘maxPlayers’] = $query[‘maxPlayers’][1];

// Player list
$query[‘playerList’] = explode(» «, $response[3], 2);
$query[‘playerList’] = explode(«, «, trim($query[‘playerList’][1], «[]»));

$query[‘latency’] = ($end_time — $beginning_time) * 1000;

return $query;
}

/**
* Queries a Minequery server using JSON.
*
* @static
* @param string $address The address to the Minequery server.
* @param int $port The port of the Minequery server.
* @param int $timeout The time given before the connection attempt gives up.
* @return object|bool A stdClass object on success, FALSE on failure.
*/
public static function query_json($address, $port = 25566, $timeout = 30) {
$beginning_time = microtime(true);

$socket = @fsockopen($address, $port, $errno, $errstr, $timeout);

if (!$socket) {
// Could not establish a connection to the server.
return false;
}

$end_time = microtime(true);

fwrite($socket, «QUERY_JSON\n»);

$response = «»;

while(!feof($socket)) {
$response .= fgets($socket, 1024);
}

$query = json_decode($response);
$query->latency = ($end_time — $beginning_time) * 1000;

return $query;
}
}
?>
[/php]

Нам понадобится первая функция из этого класса, поэтому сначала создадим экземпляр класса и запишем его в переменную $minequery

[php]$minequery = new Minequery;[/php]

Далее получим информацию о сервере в виде массива при помощи функции query класса Minequery. Входной параметр функции это IP сервера, в нашем случае это s.minersss.com

[php]$stat_info = $minequery->query(‘s.minersss.com’);[/php]

Теперь сделаем проверку на доступность сервера, для этого просто проверим существование переменной $stat_info, в которую передается массив с информацией о сервере. Если он пустой, значит сервак лежит, если в нем есть данные, значит сервак работает.

Массив содержит следующие данные:

  • [serverPort] => 25565 //Порт сервера
  • [playerCount] => 0 //Кол-во игроков на сервере сейчас
  • [maxPlayers] => 25 //Максимальное кол-во игроков
  • [playerList] => Array ( [0] => ) //Массив с игроками (их никнеймы)
  • [latency] => 15.069961547852 //Пинговка сервера

[php]

if($stat_info)
{
$status = ‘Игроков на сервере:’ . $stat_info[‘playerCount’] . ‘/’ . $stat_info[‘maxPlayers’] ;
}

else
{
$status = ‘Сервер умер, приходите позже’;
}

echo $status;

[/php]

Теперь просто выводим переменную $status в нужном для нас месте сайта, и наслаждаемся мониторингом сервера. Если есть какие-нибудь вопросы, можете задать их в комментариях.

8 комментариев

+7

Полезно 🙂

+4

@Rainbow_B0y, обращайтесь 😉

-2

Хитро придумано
Может запилю потом расширение на Хром со статистикой серва

-5

Данный комментарий собрал слишком много минусов, поэтому скрыт. Щелкните, чтобы увидеть...

-1

@naruto29, что у вас не получается?

+2

@naruto29, разве uCoz поддерживает php?