Фоновый процесс очереди в Php с Gearman / ~#root -i
  • Блог
    • Unix-подобные ОС
    • Php
    • MySQL
    • JavaScript
    • Менеджеры пакетов
    • Docker
    • Seo
  • Короткие ссылки
  • Вход
  • Регистрация
  • Главная
  • Php
  • Фоновый процесс очереди в Php с Gearman

Фоновый процесс очереди в Php с Gearman

Про установку Gearman Job Server - можно прочитать здесь.

Если все получилось согласно инструкциям по установке Gearman, то можно продолжить.

Начну с того, что для правильной работы потребуется создать некий воркер (worker), с которым будет общаться клиент (client) на Php, ставя свои задачи в очередь в фоновом режиме или дожидаясь ответа.

Создам самый простой пример на двух файлах, который позволит понять логику работы Gearman. Наш полигон будет состоять из двух файлов:

Gearman+php пример

server.php - файл в котором мы создадим worker, который будет обрабатывать все запросы. В данном примере он будет доступен по локальной ссылке : http://test1.loc/server.php

client.php - файл в котором мы будем ставить задачи для созданного воркера. Это будет наш клиент, которому будет требоваться ставить фоновые задачи. В данном примере он будет доступен по локальной ссылке : http://test1.loc/client.php

1. Рассмотрим часть ожидающего задачи воркера 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('log.txt', $data, FILE_APPEND);
    }
    
}

2. Рассмотрим сторону клиента, который шлет задачи воркеру client.php:

<?php

$client = new GearmanClient();
/**
 * Объявляем сервер, на котором нас ждет воркер. Пока все настройки поумолчанию
 */
$client->addServer();

/**
 * doBackground() - вешаем задачу не ожидая завершения.
 * log_client - alice на функцию work_log() из server.php
 *
 * второй параметр "Тестовый ЛОГ. \r\n" - уйдет в фкнкцию work_log();
 */
$client->doBackground('log_client', "Тестовый ЛОГ. \r\n");    
   

Вам приведен самый простой действующий прототип задачи поставленой на стороне Php в фоновом режиме.

3. Как это работает?

Схема работы сервиса Gearman проста. В server.php находится сам обработчик. Пока что его будем запускать в браузере, но в дальнейшем ссылкой http://test1.loc/server.php. Запрос браузера станет в постоянное ожидание из-за строк while($gmw->work());

Если запустить $gmw->work(); не в цикле, то после запуска клиентской части, скрипт отработает 1 раз и завершится.

В отдельном окне запускаем client.php ссылкой http://test1.loc/client.php. Как можно увидеть, запустится функция work_log() из server.php и будет писать слово передаваемое клиентом в файл log.txt в течении 100 секунд, 100 раз.

Если бы это делалось без gearman, то скрипт ожидал бы конца 100 секунд. Но благодаря фоновой задачи doBackground(), клиент не ощущает потерь времени и скрипт завершается не ожидая конца.

root-i
19 Мая 18
822
0
Теги
Gearman Php 5.6
Поделиться

Комментарии

Имя
Электронная почта
Рейтинг
Отзыв

Похожие посты

19 Мая 2018

Worker Gearman с консоли Cli на Php

Для нормальной работы воркера Gearman требуется постоянная его работа в зацикленном режиме. Со стороны сервера это можно реализовать одним запросом через консоль Cli. Рассмотрим роботу на простом примере.

17 Мая 2018

Установка Gearman на Ubuntu 14.04

Если вашему проекту требуется выполнение очередей в фоновом режиме, то такую возможность может дать Gearman. Это простая система для постановки очередей в фоновом или обычном режимах. Рассмотрим возможность установки Gearman на Ubuntu 14.04.

17 Мая 2018

Что такое MVC или с чего начать писать сайт?

Рассмотрим вариант создания простого проекта с MVС, который будет откликаться статическую ссылку в браузере, без управления $_GET параметрами. Ссылка будет разбиваться на путь к файлам и задействовать нужные контроллер, модель и view файл.

21 Мая 2018

Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel

Целью статьи стало присоединение (join) не объявленной в схеме (schema.xml) таблице в propel2. Видимо редкий случай или просто недостаточно документации по данной Propel ORM.

01 Июня 2018

Подклюение библиотек Composer на Php сайт

Разобравшись что такое Compser и для чего он нужен, следует разобраться как его использовать на сайте. В статье рассмотрим подключение библиотек подтянутых через Composer.

02 Июня 2018

Docker MySQL 5.7 через docker-compose и использование на Ubuntu 14.04

Установка MySQL 5.7 через Docker. Все действия будем производить на Ubuntu 14.04 c помощью docker-compose. Рассмотрим запуск, схему для compose и примеры подключения к созданному контейнеру MySQL.

18 Июля 2018

Группировка условий в запросе ORM Propel (condition, combine)

Разберем возможность объединения условий в запросе по группам в Propel. Рассмотрим пример фильтрации по полям с помощью ->condition() и ->combine().

31 Октября 2018

Анализ нагруженых частей Php кода с помощью xhprof

После разработки какого-либо инструмента на PHP, становится вопрос, насколько созданный код ресурсный и какие элементы он затрагивает еще. Рассмотрим установку xhprof, настройку и рассмотрим способы работы с xhprof.

Категории

  • Unix-подобные ОС
  • Php
  • MySQL
  • JavaScript
  • Менеджеры пакетов
  • Docker
  • Seo
Rootcms интернет-магазин

Теги

Ubuntu 14.04 (14) Софт (9) Gearman (3) Сервисы (2) Framework (1) MVC (1) Php 5.6 (14) Cli (2) Propel (3) ORM (3) JavaScript (5) Css (1) Composer (4) Docker (3) Seo (4) MySQL (5) docker-compose (2) CentOS (1) 1С (1) Memcache (1) Memcached (1) Php 7 (4) Анализ (2) Ubuntu 18.04 (9) MySQL 5.7 (4) Генерация (2) Bower (1) Npm (1) NodeJs (3) Gulp (1) ImageCMS (2) Базы (1) JQuery (1) Сниппет (1)

Последние комментарии

tedy1, можно в index.php включить режим отладки и ...
root-i
18.03.21
Поставил версию PHP 5.6 и всеравно ломаются стили ...
tedy1
16.03.21
Игорь, скорее всего так определяет сам sourcebuste...
root-i
16.12.20
Не могу разобраться почему скрипт определяет перех...
Игорь
16.12.20

Делюсь информацией в которой я требовал помощи и разбираясь затрачивал много времени. Если мои знания помогли хотя бы одному человеку, значит этот сайт создан не зря.

Благодарность, на продолжение работы сайта:
Контакты

Обратная связь

Поиск по сайту

  • Вход
  • Регистрация

Сайт работает на chmod -R