Оперативная консоль ввода / вывода для игрового сервера с использованием JavaScript или PHP - PullRequest
1 голос
/ 17 февраля 2020

Общая информация: У меня есть сервер Minecraft, работающий в подвале для некоторых друзей, который работает уже пару месяцев. Мы использовали TeamViewer для ввода команд в консоль и просмотра возможных ошибок во время работы сервера. Консоль сервера Minecraft в основном показывает вам журнал событий с отметками времени, а также строку ввода команд внизу, которая позволяет вам выполнять внутриигровые команды с правами администратора.

example console output

Консоль запускается через командный файл:

:startup
@echo off
set v1=6
cls
Java -Xmx%v1%G -jar spigot.jar nogui
goto startup

Файл spigot.jar - это файл, который в основном запускает сервер.

Поскольку мы управляем несколько серверов и процесс TeamViewer довольно небезопасный и медленный, я хотел найти другие способы доступа к консоли.

Цель: Я хочу создать HTML веб-интерфейс, который использует JavaScript или PHP для связи с консолью сервера. Должна быть возможность отображать журнал консоли в реальном времени, а также возможность набирать команды в браузере, которые затем выполняются в командной строке на сервере.

Проблемы:

  • Можно ли отправить на консоль ввод JavaScript / PHP, чтобы я мог выполнять команды из веб-интерфейса?

  • Можно ли сохранить динамическая консоль выводится в файл .txt, который сценарий JavaScript / PHP может затем отображать в реальном времени на веб-интерфейсе?

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Я бы определенно рекомендовал перенести ваши настройки за пределы среды Windows, так как вам будет гораздо проще разместить сервер PHP, et c. в среде Linux.

Конечно, я не знаком с MineCraft, но похоже, что у вас есть пакетный файл, который просто запускает Java JAR, что можно сделать с любого компьютера с JRE установлен. Java консольные приложения считывают ввод в STDIN процесса и вывод в STDOUT для любого вывода, генерируемого приложением. Это невероятно легко понять в среде Ubuntu.

Например, допустим, вы устанавливаете стандартный стек LAMP на бесплатную sh установку Ubuntu. У вас будет PHP для запуска процесса на стороне сервера и Apache для размещения любого веб-интерфейса, который вы решите построить. Сосредоточив внимание на интерфейсе и бэкэнде, я бы, вероятно, попытался настроить API в PHP, используя Slim или другую облегченную среду. В конечной точке API, которую вы используете для запуска вашего сервера, это будет выглядеть примерно так:

exex('screen -d -m -S ServerOne');    
exec('screen -S ServerOne -p 0 -X stuff "java -Xmx%v1%G -jar spigot.jar nogui > /some_path_to_log^M"');

Первый exec() создаст сеанс экрана с именем «ServerOne», внутри которого может выполняться серверный процесс. Второй exec() отправит команду, необходимую для запуска вашего серверного процесса внутри сеанса экрана. По сути, это будет запускать ваш сервер асинхронно с вашим PHP сценарием и записывать вывод по указанному пути. Зная, где ожидать вывода, в конечной точке API, которую вы используете для получения журнала, у вас будет что-то вроде:

$logContent = file_get_content('/some_path_to_log'); 

Наконец, в конечной точке API, которую вы используете для записи команд на сервер, вы будет иметь что-то похожее на:

exec('screen -S ServerOne -p 0 -X stuff "<your_command_here>^M"');

Это запишет в поток STDIN процесса Java вашего сервера, который, в свою очередь, должен интерпретироваться так, как если бы вы на самом деле печатали на клавиатуре консоли. сам по себе.

В этом суть, или, по крайней мере, с чего бы я начал. Есть несколько довольно интересных вещей, которые вы могли бы сделать с WebSockets, чтобы открыть сеанс ввода-вывода в реальном времени для консоли вашего сервера, но это было бы немного сложнее, чем этот пост. Если вам интересно, проверьте Ratchet для PHP или ws для Node.js.

Рассмотрите этот пост ServerFault для более информация об отправке входных данных на сеансы экрана.

1 голос
/ 17 февраля 2020

Полагаю, вы могли бы показать журнал на веб-сайте следующим образом:

первый скрипт игрового сервера:

:startup
@echo off
set v1=6
cls
Java -Xmx%v1%G -jar spigot.jar nogui > log.txt
fileup log.txt
goto startup

второй скрипт игрового сервера (называемый fileup.bat) {заменить myusername, mypassword и servername.com с учетными данными, если ваш php сервер}:

@echo off
echo user MyUserName> ftpcmd.dat
echo MyPassword>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo put %1>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat SERVERNAME.COM
del ftpcmd.dat

php сценарий на стороне сервера:

<?php
$filename = "log.txt";
$fp = fopen($filename, "r");

$content = fread($fp, filesize($filename));
$lines = explode("\n", $content);
fclose($fp);
print_r($lines);
?>

, кстати: я не проверял ни одного из эти сценарии, и они могут не работать, я просто основал это на своих знаниях php и пакета. Кроме того, второй пакетный сценарий должен находиться в том же каталоге, что и первый пакетный сценарий, и вам не нужно запускать второй пакетный сценарий

Примечание: я опытный пользователь PHP, но я не знаю очень много о партии (я использую linux), но я полагаю, это будет работать, и я часто использовал партию в прошлом. Также я рекомендую использовать скрипт PHP на внешнем размещенном php сервере от 000webhost.com или infinityfree. net, потому что они бесплатны и экономят ваше время + у них есть все необходимые предварительно настроенные ftp-файлы.

Пожалуйста, дайте мне знать, если это сработало

...