2016-05-09 7 views
3

У меня есть некоторые сомнения в том, как я могу эффективно использовать gearman в своем приложении php.Gearman и inotify для выполнения задач

Im использует inotify для мониторинга папки, в которой будет храниться и обрабатываться большое количество файлов (более 1000 за раз). Для анализа каждого из них и сохранения его содержимого в базе данных, пытающейся использовать механизм.

while(true){ 
     sleep(5); # spare some CPU Cycles 
     set_time_limit(0); # unlimited timeout request 
     // read events 
     $events = inotify_read($this->instance); 

     // if the event is happening within our 'Files directory' 
      if ($events[0]['wd'] === $this->watch_id){    
       foreach ($events as $key=>$value) 
       { 
        if($events[$key]['mask'] === IN_CREATE){ 
         # A new file was created in folder       
         $client = new \GearmanClient(); 
         $client->addServer(); 
         $client->addTask("parse_file", $events[$key]['name']); # add task to parse that file 
         printf("Created file: %s in Files directory\n", $events[$key]['name']); 
        } 
        else if ($events[$key]['mask'] === IN_DELETE){ 
         printf("Deleted file: %s in Files directory\n", $events[$key]['name']); 
        }       
       } 
       if(!is_null($client)){ # once everything is done, run the tasks. 
        $client->runTasks();     
       } 
      } 
    } 

Я создал worker.php файл вроде этого:

<?php 
namespace controllers; 
use app\file\File; 
require_once 'vendor/autoload.php'; 

$worker = new \GearmanWorker(); 
$worker->addServer(); 
$worker->addFunction('parse_file', function($job){ 
    echo "entrou no add function!<br>"; 
    print_r ($job->workload()); 
    sleep(2); 
    return new File($job->workload()); # this class parses the files content in database 
});      
while ($worker->work()); 

вещи происходят в настоящее время. Рабочая функция запускается, и данные первого файла хранятся в базе данных, но возникает ошибка:

Это выход моего файла nohup.out.

Catchable fatal error: Object of class app\file\File could not be converted to string in /var/www/html/worker.php on line 18 

Что хочет «он»? :)

ответ

0

Мне удалось разобраться с последней частью проблемы.

Ошибка:

Catchable fatal error: Object of class app\file\File could not be converted to string in /var/www/html/worker.php on line 18 

Был, потому что я возвращался объект здесь:

sleep(2); 
    return new File($job->workload()); # this class parses the files content in database 

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

Только для записи: Если вы попытаетесь подключить работника к удаленному серверу заданий, у вас, вероятно, будет плохое время. Чтобы разрешить удаленные соединения вы должны изменить слушать порт в конфигурации Gearman-сервер, расположенной по адресу /etc/default/gearman-job-server:

# Parameters to pass to gearmand. 
PARAMS="" 

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

 Смежные вопросы

  • Нет связанных вопросов^_^