Worker Gearman с консоли Cli на 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 наглядно видно, что в браузере все завершилось, а консоль работает сама по себе. Если консоль закрыть, и запустить потом заново воркер, то он продолжит работу далее с того момента, на котором остановился.

Работа воркера

981 0

Комментарии

Пока нет ни одного отзыва. Оставьте отзыв первым
Только авторизованные пользователи могут оставлять комментарии Вход

Похожие статьи

Создать и скачать CSV на PHP

Рассмотрим возможность быстрого создания CSV файла с автоматическим скачиванием файла. Рассмотрим формирование, разделители и header для возможности скачать файл.

Долгое хранение корзины в интернет-магазине

Рассмотрим варианты популярные варианты хранения товаров в корзине в интернет-магазине. Обозначим плюсы и минусы таких хранений. Рассмотрим варианты долгосрочного хранения корзины.