Мне удалось успешно установить gearman на сервере Amazon AWS, а также расширение PHP для gearman. Я запускаю свою настройку в следующие шаги:
Однако процесс не работает. Я думаю, что это застревает в клиенте gearman. Ниже приведен мой простой код для клиента, сервера и работника (наряду с выводом файла журнала и выводом выполнения)
Код клиента:
<?php
$client = new GearmanClient();
$client->addServer('localhost', 4730);
$arguments = array(
'url' => 'http://localhost/hit.php',
);
$client->addTask('fetchURL', json_encode($arguments));
print "running tasks";
if(!$client->runTasks())
{
echo "ERROR " . $client->error() . "\n";
exit;
}
else
print "task done";
echo "DONE";
Рабочий код:
<?php
$worker = new GearmanWorker();
$worker->addServer("localhost", 4730);
$worker->addFunction("fetchURL", "fetch_url");
print "Waiting for job...\n";
while($worker->work())
{
if ($worker->returnCode() != GEARMAN_SUCCESS)
{
echo "return_code: " . $worker->returnCode() . "\n";
break;
}
}
function fetch_url($job)
{
print "function called...\n";
$arguments = json_decode($job->workload(),TRUE);
if (!empty($arguments['url']))
{
print("Fetching " . $arguments['url'] . "\n");
return file_get_contents($arguments['url']);
}
}
Выход сервера:
Рабочий выход:
Выход клиента:
Вывод файла журнала:
DEBUG 2016-09-02 12:06:38.848867 [ main ] THREADS: 4 -> libgearman-server/gearmand.cc:263
INFO 2016-09-02 12:06:38.848911 [ main ] Initializing Gear on port 4730 with SSL: false
INFO 2016-09-02 12:06:38.848956 [ main ] Starting up with pid 28079, verbose is set to DEBUG
DEBUG 2016-09-02 12:06:38.848997 [ main ] Method for libevent: epoll -> libgearman-server/gearmand.cc:362
DEBUG 2016-09-02 12:06:38.849036 [ main ] Trying to listen on 127.0.0.1:4730 -> libgearman-server/gearmand.cc:639
INFO 2016-09-02 12:06:38.849056 [ main ] Listening on 127.0.0.1:4730 (9)
DEBUG 2016-09-02 12:06:38.849064 [ main ] Creating wakeup pipe -> libgearman-server/gearmand.cc:903
DEBUG 2016-09-02 12:06:38.849069 [ main ] Creating 4 threads -> libgearman-server/gearmand.cc:376
DEBUG 2016-09-02 12:06:38.849076 [ main ] Initializing libevent for IO thread -> libgearman-server/gearmand_thread.cc:207
DEBUG 2016-09-02 12:06:38.849090 [ main ] Creating IO thread wakeup pipe -> libgearman-server/gearmand_thread.cc:478
DEBUG 2016-09-02 12:06:38.849119 [ main ] Thread 1 created -> libgearman-server/gearmand_thread.cc:256
DEBUG 2016-09-02 12:06:38.849149 [ main ] Initializing libevent for IO thread -> libgearman-server/gearmand_thread.cc:207
DEBUG 2016-09-02 12:06:38.849164 [ main ] Creating IO thread wakeup pipe -> libgearman-server/gearmand_thread.cc:478
DEBUG 2016-09-02 12:06:38.849183 [ main ] Thread 2 created -> libgearman-server/gearmand_thread.cc:256
DEBUG 2016-09-02 12:06:38.849189 [ main ] Initializing libevent for IO thread -> libgearman-server/gearmand_thread.cc:207
DEBUG 2016-09-02 12:06:38.849206 [ main ] Creating IO thread wakeup pipe -> libgearman-server/gearmand_thread.cc:478
DEBUG 2016-09-02 12:06:38.849225 [ main ] Thread 3 created -> libgearman-server/gearmand_thread.cc:256
DEBUG 2016-09-02 12:06:38.849230 [ main ] Initializing libevent for IO thread -> libgearman-server/gearmand_thread.cc:207
DEBUG 2016-09-02 12:06:38.849245 [ main ] Creating IO thread wakeup pipe -> libgearman-server/gearmand_thread.cc:478
DEBUG 2016-09-02 12:06:38.849268 [ main ] Thread 4 created -> libgearman-server/gearmand_thread.cc:256
DEBUG 2016-09-02 12:06:38.849273 [ main ] replaying queue: begin -> libgearman-server/gearmand.cc:389
DEBUG 2016-09-02 12:06:38.849276 [ main ] __replay -> libgearman-server/plugins/queue/default/queue.cc:101
DEBUG 2016-09-02 12:06:38.849279 [ main ] replaying queue: end -> libgearman-server/gearmand.cc:395
INFO 2016-09-02 12:06:38.849282 [ main ] Adding event for listening socket (9)
DEBUG 2016-09-02 12:06:38.849285 [ main ] Adding event for wakeup pipe -> libgearman-server/gearmand.cc:956
DEBUG 2016-09-02 12:06:38.849288 [ main ] Entering main event loop -> libgearman-server/gearmand.cc:404
DEBUG 2016-09-02 12:06:38.849336 [ 2 ] Entering thread event loop -> libgearman-server/gearmand_thread.cc:446
DEBUG 2016-09-02 12:06:38.849361 [ 3 ] Entering thread event loop -> libgearman-server/gearmand_thread.cc:446
DEBUG 2016-09-02 12:06:38.849379 [ 4 ] Entering thread event loop -> libgearman-server/gearmand_thread.cc:446
DEBUG 2016-09-02 12:06:38.849412 [ 1 ] Entering thread event loop -> libgearman-server/gearmand_thread.cc:446
DEBUG 2016-09-02 12:06:38.849422 [ main ] staring up Epoch thread -> libgearman-server/timer.cc:61DEBUG 2016-09-02 12:06:38.855568 [ main ] accept() 32 -> libgearman-server/gearmand.cc:862
INFO 2016-09-02 12:06:38.855580 [ main ] Accepted connection from 127.0.0.1:33071
DEBUG 2016-09-02 12:06:38.855593 [ 4 ] Received CON wakeup event -> libgearman-server/gearmand_thread.cc:605
DEBUG 2016-09-02 12:06:38.855602 [ 4 ] setsockopt() fd:32 -> libgearman-server/io.cc:833
DEBUG 2016-09-02 12:06:38.855613 [ 4 ] 127.0.0.1:33071 Watching POLLIN -> libgearman-server/gearmand_thread.cc:151
DEBUG 2016-09-02 12:09:30.885913 [ main ] accept() 33 -> libgearman-server/gearmand.cc:862
INFO 2016-09-02 12:09:30.885943 [ main ] Accepted connection from 127.0.0.1:33073
DEBUG 2016-09-02 12:09:30.885969 [ 3 ] Received CON wakeup event -> libgearman-server/gearmand_thread.cc:605
DEBUG 2016-09-02 12:09:30.885983 [ 3 ] setsockopt() fd:33 -> libgearman-server/io.cc:833
DEBUG 2016-09-02 12:09:30.885993 [ 3 ] 127.0.0.1:33073 Watching POLLIN -> libgearman-server/gearmand_thread.cc:151DEBUG 2016-09-02 12:09:34.144611 [ main ] accept() 34 -> libgearman-server/gearmand.cc:862
INFO 2016-09-02 12:09:34.144634 [ main ] Accepted connection from 127.0.0.1:33075
DEBUG 2016-09-02 12:09:34.144650 [ 2 ] Received CON wakeup event -> libgearman-server/gearmand_thread.cc:605
DEBUG 2016-09-02 12:09:34.144662 [ 2 ] setsockopt() fd:34 -> libgearman-server/io.cc:833
DEBUG 2016-09-02 12:09:34.144673 [ 2 ] 127.0.0.1:33075 Watching POLLIN -> libgearman-server/gearmand_thread.cc:151
Я поместил пробелы в журналы, чтобы обозначить точки, с которых начинается рабочий & клиент запускается Из журналов видно, что клиент также ведет себя как рабочий (или рабочий, как клиент), так как кажется, что нет разницы между транзакциями журнала для рабочего или клиента. Я не уверен, что транзакции журнала должны быть более понятными, но мне это кажется странным.
Кроме того, мой клиент gearman не выходит. что странно
Ничего не происходит после этого. Я что-то не так делаю? Это коллективное понимание, которое я получил, прочитав несколько учебных пособий о механизме онлайн, однако я все еще не могу заставить его работать. Любая помощь будет оценена.
Мне удалось решить проблему. Это было так же просто, как изменить localhost на 127.0.0.1 в client.php и worker.php
Не уверен, почему, но это сработало. Если у кого-нибудь есть объяснение этому, я был бы рад узнать 🙂
Других решений пока нет …