class Worker extends AbstractClient

Der Worker stellt Methoden bereit, die vom Server aufgerufen werden können.

Über die Methode Worker::work() werden Methoden automatisch registriert. Die Namen der Methoden die automatisch registriert werden sollen, müssen mit do anfangen. Andere Methoden können manuell über Worker::registerMethod() registriert werden.

// Eigene Workerklasse; mit Methode toLower
class MyWorker extends \Alvine\Infrastructure\Gearman\Worker {
   protected function doToLower(\Alvine\Infrastructure\Gearman\Worker\Job $job) {
     $this->sendData($job, \strtolower((string) $job->getPayload()));
   }
}

$worker = new MyWorker('localhost');

// Es können auch Lambda-Methoden registriert werden.
$worker->Second = function() {};
// Groß-/Kleinschreibung beachten!
$worker->registerMethod('Second');

// Prüfen ob Server verfügbar
$worker->ping();

// Methoden registrieren und Abarbeitung starten
$worker->work();

Constants

PROTOCOL_PORT

Standardprotokoll von Gearman

Properties

protected boolean $registerd

Methods

__construct(string $host, integer $port = self::PROTOCOL_PORT, integer $timeout = null)

Neue Instanz

boolean
isReceivedFinished()

Prüft, ob die Empfangenen Daten ausreichen und gibt false oder true zurück. Wird true zurückgegeben beendet der Socket das Empfangen der Daten.

sendPacket(Packet $packet)

Paket übertragen

registerMethod(string $name)

Methode registrieren

registerDoMethods()

Alle Methoden die mit do-anfangen werden registrieren. Diese Methode registriert die Methoden nur einmal und merkt sich den Zustand. Alle weiteren Aufrufe haben keine Funktion mehr. Der Zustand kann über self::resetAbilities() zurückgesetzt werden.

ping()

Ping an den Server senden

resetAbilities()

Setzt alle am Server registrierten Methoden zurück. Der Worker führt ab diesem Zeitpunkt keine Arbeiten mehr aus.

boolean
available()

Prüft ob der server verfügbar ist.

handleEmptyQueue()

Warteschleife

handleJob(JobAssign $response)

Job zuweisen und ausführen

work()

Jobs in einer Endlosschleife abarbeiten

workOnce()

Einen Job abarbeiten und dann beenden

sendStatus(Job $job, integer $numerator, integer $denominator)

Senden des Standes für Backend-Jobs. $numerator ist der Antel von $denominator der erledigt wurde. Der folgende Aufruf sagt das 50% von 100% erledigt sind.

sendData(Job $job, string $data)

Daten senden

Details

in AbstractClient at line 50
__construct(string $host, integer $port = self::PROTOCOL_PORT, integer $timeout = null)

Neue Instanz

Parameters

string $host Hostname
integer $port Port
integer $timeout Timeout

in AbstractClient at line 64
protected boolean isReceivedFinished()

Prüft, ob die Empfangenen Daten ausreichen und gibt false oder true zurück. Wird true zurückgegeben beendet der Socket das Empfangen der Daten.

Return Value

boolean Abbruchbedingung

in AbstractClient at line 94
AbstractClient sendPacket(Packet $packet)

Paket übertragen

Umwandeln der Paketdaten in einen Zeichenstream

Parameters

Packet $packet

Return Value

AbstractClient

at line 79
Worker registerMethod(string $name)

Methode registrieren

Parameters

string $name Name der Methode im Objekt

Return Value

Worker

at line 94
protected Worker registerDoMethods()

Alle Methoden die mit do-anfangen werden registrieren. Diese Methode registriert die Methoden nur einmal und merkt sich den Zustand. Alle weiteren Aufrufe haben keine Funktion mehr. Der Zustand kann über self::resetAbilities() zurückgesetzt werden.

Return Value

Worker

at line 120
Worker ping()

Ping an den Server senden

Mit dem Ping lässt sich prüfen, ob der definirte Server antwortet. Dazu wird ein zufäliger Teststring an den Server gesendet und auf die Echo-Antwort gewartet.

Es wird ein doEcho-Paket gesendet.

Return Value

Worker

Exceptions

PingException

at line 135
Worker resetAbilities()

Setzt alle am Server registrierten Methoden zurück. Der Worker führt ab diesem Zeitpunkt keine Arbeiten mehr aus.

Return Value

Worker

at line 147
boolean available()

Prüft ob der server verfügbar ist.

Es wird die Methode self::ping() verwendet.

Return Value

boolean Ergebnis

at line 164
protected Worker handleEmptyQueue()

Warteschleife

Return Value

Worker

Exceptions

ProtocolException
ProtocolException

at line 203
protected Worker handleJob(JobAssign $response)

Job zuweisen und ausführen

DieMethoden werden in der Reihenfolge doXXX() und XXX aufgerufen

Parameters

JobAssign $response

Return Value

Worker

Exceptions

NotImplementedException Methode nicht implementiert

at line 258
Worker work()

Jobs in einer Endlosschleife abarbeiten

Work registriert - falls nicht bereits geschehen - alle Methoden deren Methodenname mit do anfängt beim Server und wartet auf Jobs. Wird ein Job übertragen arbeitet work() diese Aufgabe ab und kehr anschliessend zurück in den Wartezustand.

Dies wird unendlich wiederholt. work fängt alle Exceptions ab und logt diese im aktuellen Logger.

Eine Worker-Methode kann die Abarbeitung des Workers mit dem schmeissen einer ExitException beenden.

Sollte ein PHP-Fehler auftreten oder eine ExitExeption geworfen werden, so ruft work() resetAbilities() auf und beendet sich.

Return Value

Worker

Exceptions

ProtocolException

at line 303
Worker workOnce()

Einen Job abarbeiten und dann beenden

workOnce registriert - falls nicht bereits geschehen - alle Methoden deren Methodenname mit do anfängt beim Server und wartet auf Jobs. Wird ein Job übertragen arbeitet workOnce() diese Aufgabe ab und beendet dann die Arbeit.

Return Value

Worker

Exceptions

ProtocolException

at line 349
protected Worker sendStatus(Job $job, integer $numerator, integer $denominator)

Senden des Standes für Backend-Jobs. $numerator ist der Antel von $denominator der erledigt wurde. Der folgende Aufruf sagt das 50% von 100% erledigt sind.

{code} $this->sendStatus($job, 50,100) {code}

Parameters

Job $job
integer $numerator
integer $denominator

Return Value

Worker

at line 366
protected Worker sendData(Job $job, string $data)

Daten senden

Parameters

Job $job
string $data

Return Value

Worker