Gearman Worker verbinden sich nach Upgrade nicht mehr
Heute ein kurzer Tipp bezüglich PECL/gearman: Wenn ihr bei der Nutzung einer aktuellen Version den folgenden Fehler bekommt
send_packet(GEARMAN_COULD_NOT_CONNECT) Failed to send server-options packet -> libgearman/connection.cc:430
dann liegt es daran dass ihr keinen Port beim Aufruf der Methode GearmanClient::addServer() angegeben habt. Bisher war der zweite Parameter optional und als Default wurde 4730 genommen, aber seit einigen Versionen (welcher genau kann ich nicht sagen) scheint er angegeben werden zu müssen. Wir benutzen aktuell PECL/gearman Version 1.1.1 kompiliert mit libgearman 1.1.5
Falls ihr also Gearman nutzt und den zweiten Parameter noch nicht gesetzt habt, fügt ihn am besten jetzt schon hinzu, damit ihr bei einem Upgrade in der Zukunft keine Probleme bekommt.
Hier habe ich die Lösung gefunden (wäre ich selbst wahrscheinlich nie drauf gekommen):
http://stackoverflow.com/questions/14883681/gearman-gives-me-gearman-could-not-connect-it-is-definitely-running
https://answers.launchpad.net/gearmand/+question/221277
Hast du auch ein Beispiel für die Implementation dieser Klasse? 🙂
Chris
8 Apr 13 at 15:58
@Chris Du meinst ein Beispiel wie man die Methode addServer() benutzt? Siehe php.net Manual:
http://www.php.net/manual/en/gearmanclient.addserver.php
http://www.php.net/manual/en/gearman.examples.php
Wenn du etwas spezielleres meinst müsstest du spezieller fragen 😉
Michael Kliewe
8 Apr 13 at 16:14
Sry, also ich meinte wo ein praktischer Einsatz, also so im echten Leben von GearmanClient wäre. Die Doku kann ich auch lesen. 😀
Chris
8 Apr 13 at 16:32
Gearman ist für asynchrone Aufgaben gedacht, oder wenn du viele Dinge parallel abarbeiten möchtest. Als erstes denkt man da evtl. an die Berechnung von Vorschaubildchen, den Massenversand von E-Mail (z.B. wenn in einem Forum ein Beitrag geschrieben wird und alle anderen Beteiligten eine E-Mail erhalten sollen, was ja hunderte sein können), dann möchte man so etwas nicht im selben PHP-Prozess erledigen der sich um die Webseitendarstellung kümmert, sondern asynchron, eventuell sogar auf einem anderen (virtuellen) Server.
Dann erstellt man einen oder mehrere Jobs und übergibt diese dem Gearman-Job-Server. Der verteilt diese Aufgaben dann an die verbundenen Worker, die diese Aufgabe erledigen können. Diese Worker können auch in anderen Programmiersprachen geschrieben sein.
Man unterscheidet dann zwischen Vordergrund- und Hintergrund-Jobs. Bei Vordergrund-Jobs wartet der Auftraggeber auf das Ergebnis, das von dem Worker oder den Workern errechnet wird. Bei Hintergrund-Jobs wartet er nicht auf das Ergebnis.
Weitere Beispiele wären z.B. Aufräumscripte, Warm-up-Scripte, Importe und Exporte, Erstellung von PDFs, Zugriff auf externe APIs oder ähnliches. Alles was langsam ist oder parallelisiert werden soll.
Go-Daddy verwendet es beispielsweise für die Suche:
http://inside.godaddy.com/cloud-processing-with-gearman/
Wenn du nach „php gearman“ googlest findest du auch eine Menge Blogartikel und Einsatzzwecke (und auch Probleme).
Michael Kliewe
8 Apr 13 at 16:59
Ok, ich hatte nämlich zu erst „synchronously“ gelesen und dachte mir „was bringt das dann schon wenns nicht async laufen kann?“. 😉
Werde mich mal durch die inside.godaddy-Quelle durchwuseln, vielen Dank!
Chris
9 Apr 13 at 07:58
cordless security cameras
best wireless security system
26 Mai 18 at 10:22