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 якщо потрібно
&nbsp ;*/
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 наочно видно, що у браузері все завершилося, а консоль працює сама собою. Якщо консоль закрити, і запустити потім заново воркер, він продовжить роботу далі з того моменту, на якому зупинився.

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

1470 0

Відгуки

Поки немає жодного відгуку. Станьте першим!
Тільки авторизовані користувачі можуть залишати відгуки Вхід

Схожі статті

Створити та завантажити CSV на PHP

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

Шаблони ImageCMS 4.10-4.12.1

Останні шаблони від ImageCMS 4.12, для завантаження потрібна авторизація.