Фоновый процесс очереди в Php с Gearman
Иногда возникает нужда использовать фоновый процессы на Php. Рассмотрим пример использования такой возможности в связке Gearman + Php.
Чтобы не описывать повторно, даю ссылку на детали. На основе этой темы, мы будем пробовать запустить воркер через консоль и дать ему какую-то работу через клиент.
Внесем в код некоторые изменения. Вместо того, чтобы сохранять данные в файл, мы будем использовать вывод в консоль.
file_put_contents("php://stdin", 'строка вывода');
Продемонстрирую файл server.php с новыми изменениями.
<?php
$gmw = new GearmanWorker();
/**
* Пока рассмотрим инициализацию addServer() поумолчанию
* Этот метод нужен для объевляния, на какой машине работает этот worker
*/
$gmw->addServer();
/**
* log_client - со стороны клиента испольщовать этот alice
* work_log - функция, на которую будет кидать воркер, если
* на alice log_client придет что-то.
*/
$gmw->addFunction('log_client', 'work_log');
/**
* Специально сделано зациеливание
* Если объявить просто $gmw->work(), то задача завершится сразу же
* после выполнения. Тоесть сработает только раз.
*/
while($gmw->work());
/**
* Вписывает логи в файл
* @param JSON $param - Принимает только строку, поэтому передаем в json если нужно
*/
function work_log($param) {
/*Достает данные передаваемые клиентом*/
$data = $param->workload();
/**
* Искуственно делаем нагрузку, чтобы была имитация большого ожидания.
* Тут мы увидем, что скрипт клиента не будет ждать окончания 100 секунд,
* а повесит задачу и забудет про нее.
*/
for ($i = 0; $i < 100; $i++) {
sleep(1);
file_put_contents("php://stdin", $data); // Изменили для вывода в консоль
}
}
Запуск с консоли производится так (наш проект лежит в директории /var/www/test1.loc):
php /var/www/test1.loc/server.php
Данная строка в консоли повесит воркер в ожидание. Он будет ждать работы пока не закроется консоль или не кончится время ожидания max_input_time в php.ini.
Видно что консоли ожидает (Warning свидетельствует про возможную проблему в самой библиотеке Gearman). После запуска client.php наглядно видно, что в браузере все завершилось, а консоль работает сама по себе. Если консоль закрыть, и запустить потом заново воркер, то он продолжит работу далее с того момента, на котором остановился.
Иногда возникает нужда использовать фоновый процессы на Php. Рассмотрим пример использования такой возможности в связке Gearman + Php.
При запуске скрипта с консоли отсутствует DOCUMENT_ROOT в $_SERVER. Попытаемся обойти это своими путями, отловить директорию файла.
Если вашему проекту требуется выполнение очередей в фоновом режиме, то такую возможность может дать Gearman. Это простая система для постановки очередей в фоновом или обычном режимах. Рассмотрим возможность установки Gearman на Ubuntu 14.04.
Рассмотрим вариант создания простого проекта с MVС, который будет откликаться статическую ссылку в браузере, без управления $_GET параметрами. Ссылка будет разбиваться на путь к файлам и задействовать нужные контроллер, модель и view файл.
Целью статьи стало присоединение (join) не объявленной в схеме (schema.xml) таблице в propel2. Видимо редкий случай или просто недостаточно документации по данной Propel ORM.
Разобравшись что такое Compser и для чего он нужен, следует разобраться как его использовать на сайте. В статье рассмотрим подключение библиотек подтянутых через Composer.
Установка MySQL 5.7 через Docker. Все действия будем производить на Ubuntu 14.04 c помощью docker-compose. Рассмотрим запуск, схему для compose и примеры подключения к созданному контейнеру MySQL.
Разберем возможность объединения условий в запросе по группам в Propel. Рассмотрим пример фильтрации по полям с помощью ->condition() и ->combine().