(PECL gearman >= 0.6.0)
GearmanWorker::wait β ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠ° Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠ° Π·Π°Π΄Π°Ρ
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΎΠΆΠΈΠ΄Π°ΡΡ Π·Π°Π΄Π°Π½ΠΈΡ ΠΎΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Π·Π°Π΄Π°Π½ΠΈΠΉ Gearman. Π ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΊΠ°Π·Π° Π±ΡΠ΄Π΅Ρ
Π²ΡΠ΄Π°Π½ΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ E_WARNING Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ
ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π΄ΡΠ΅ΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ.
Π‘ΠΈΠ³Π½Π°ΡΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΈΠ»ΠΈ false, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°.
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΠ°ΠΏΡΡΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
<?php
echo "ΠΠ°ΠΏΡΡΠΊ\n";
# ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
$worker= new GearmanWorker();
# Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°
$worker->addOptions(GEARMAN_WORKER_NON_BLOCKING);
# Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (localhost Π½Π° ΠΏΠΎΡΡΡ 4730)
$worker->addServer();
# Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ callback-ΡΡΠ½ΠΊΡΠΈΠΈ
$worker->addFunction('reverse', 'reverse_fn');
# ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π°Π΄Π°Π½ΠΈΠ΅
while (@$worker->work() ||
$worker->returnCode() == GEARMAN_IO_WAIT ||
$worker->returnCode() == GEARMAN_NO_JOBS)
{
if ($worker->returnCode() == GEARMAN_SUCCESS)
continue;
echo "ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ...\n";
if (!@$worker->wait())
{
if ($worker->returnCode() == GEARMAN_NO_ACTIVE_FDS)
{
# ΠΌΡ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ Π½ΠΈ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΡΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ
# ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ
sleep(5);
continue;
}
break;
}
}
echo "ΠΡΠΈΠ±ΠΊΠ° Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅: " . $worker->error() . "\n";
function reverse_fn($job)
{
return strrev($job->workload());
}
?>