Моя идея - запустить сервер minecraft с Symfony2 Process Class и хочу дать мне обратную связь в режиме реального времени. Таким образом, как описано в Process cookbook part, я стараюсь следующий код:Symfony2 Процесс не дает обратной связи в режиме реального времени
$process = new Process('sudo java -jar -Xms512M -Xmx1G ../server/minecraft_server.jar');
$process->setTimeout(null);
$process->run(function ($type, $buffer) {
if ('err' === $type) {
echo 'ERR > '.$buffer;
} else {
echo 'OUT > '.$buffer;
}
});
Из-за некоторых проблем разрешения с пользователем apache2 я изменил sudoers файл с этим: www-data ALL = (myspecialUser) NOPASSWD: /usr/bin/java
так что пользователь WWW-данные могут запустить java.
Сервер запускается в фоновом режиме, но теперь моя проблема заключается в том, что я не получаю никакого вывода в реальном времени. Только если я завершаю (или убиваю) процесс сервера minecraft, я получаю вывод.
Любые предложения о том, как получить выход в режиме реального времени?
Где выход будет? Если это файл, вы должны прочитать это содержимое файла из действия и вернуть его, а затем периодически вызывать его из ajax, чтобы иметь его на своей странице. – jaudette
Рабочее решение будет перенаправлять вывод на стандартную ошибку. Например, это будет работать для вас: fprintf (STDERR, «ERR>% s», $ buffer); Но я не уверен, что это лучшее решение. – Cyprian
нет, это не работает для меня. Я думаю, что я напишу задачу symfony, которая запускает сервер minecraft (вывод на консоль работает) – F481