Worker
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
Neue Instanz
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.
Methode registrieren
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.
Setzt alle am Server registrierten Methoden zurück. Der Worker führt ab diesem Zeitpunkt keine Arbeiten mehr aus.
Prüft ob der server verfügbar ist.
Warteschleife
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.
Details
in AbstractClient at line 50
__construct(string $host, integer $port = self::PROTOCOL_PORT, integer $timeout = null)
Neue Instanz
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.
in AbstractClient at line 94
AbstractClient
sendPacket(Packet $packet)
Paket übertragen
Umwandeln der Paketdaten in einen Zeichenstream
at line 79
Worker
registerMethod(string $name)
Methode registrieren
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.
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.
at line 135
Worker
resetAbilities()
Setzt alle am Server registrierten Methoden zurück. Der Worker führt ab diesem Zeitpunkt keine Arbeiten mehr aus.
at line 147
boolean
available()
Prüft ob der server verfügbar ist.
Es wird die Methode self::ping() verwendet.
at line 164
protected Worker
handleEmptyQueue()
Warteschleife
at line 203
protected Worker
handleJob(JobAssign $response)
Job zuweisen und ausführen
DieMethoden werden in der Reihenfolge doXXX() und XXX aufgerufen
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.
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.