2016-05-10 4 views
1

Ich weiß, dass dies schon einmal gefragt wurde, aber ich kann kein bestimmtes Teil des Puzzles herausfinden und würde wirklich jede Hilfe dazu brauchen!Daemon, der eine "Warteschlange" überwacht und Befehle asynchron ausführt

Programmablauf:

ursprünglicher Antrag: Browser -> Apache -> PHP -> PHP sendet Taskinfo über eine Zeitbefehl aufwendig, um 'etwas', und gibt sofort.

Es können mehrere Anfragen gleichzeitig von mehreren Browsern an den Server gesendet werden.

SERVER: Das 'etwas' läuft einen bestimmten Befehl mit dem Taskinfo als params parallel im Hintergrund> spart Ausgabe DB

AJAX: -> Apache -> PHP -> Prüft DB -> Gibt Informationen an den Benutzer zurück.

Ich habe Lösungen wie Rabbitmq/Gearman etc erforscht, aber bin nicht in der Lage, sie herauszufinden.

Das präzise Problem ist, dass ich den Teil nicht herausfinden kann, wo der 'etwas' (ein Daemon) den angegebenen Befehl automatisch ausführt, wenn eine Aufgabe zu einer 'Warteschlange/Liste' hinzugefügt wird. So wie ich es sehe, muss ein Befehl getrennt vom Daemon ausgeführt werden, und ich verstehe nicht, wo und wie dieser Befehl ausgeführt werden soll.

Kurz gesagt: Ein nicht blockierender Daemon, der eine Warteschlange überwacht und einen bestimmten Befehl ausführt!

Aber wie?

Seit einigen Tagen in diesem stecken geblieben. Ich weiß, es gibt einfachere Alternativen wie curl und exec(), aber sie sind nicht für meinen Anwendungsfall geeignet.

Dank

+0

Je nachdem, was Sie verwenden, um den Daemon zu erstellen, sollte es eher geradlinig sein. Mithilfe einer Ereignisschleife können Sie auf den Socket für eingehende Aufgaben reagieren. Sie stellen die Aufgabe in eine Warteschlange. Während Aufgaben vorhanden sind, registrieren Sie einen Rückruf, um ihn auszuführen. Nach dem Ausführen der Aufgabe, holen Sie den nächsten aus der Warteschlange etc. Es sollte ziemlich einfach sein, dies zu tun mit Bibliothek wie [Eiszapfen] (https://icicle.io/) – Mjh

+0

oh von 'Daemon' ich meinte so etwas wie Rabbitmq Beanstald Server, der wahrscheinlich nur beim Start ausgeführt wird. Danke für icicle, es auschecken .. –

Antwort

0

Werfen Sie einen Blick auf the second tutorial for rabbitmq, wie viel sieht, was Sie brauchen. Wenn es nicht klar ist, werfen Sie zuerst einen Blick auf das erste - es ist ganz einfach.

Grundsätzlich kann jede Anmeldung Client rabbitmq Broker kann Ihr Daemon sein und Sie können so viele von ihnen, wie Sie (im Allgemeinen) wollen.

+0

Meinst du ich kann/sollte 'worker.sh' als Hintergrund-Daemon ausführen, mit einigen Startup-Skript (anstatt zu versuchen, es mit dem Rabbitmq-Server zu verknüpfen)? Wenn ja, werde ich die Anzahl der Arbeiter, die es momentan gibt, manuell verwalten? ty –

+0

Was meinst du mit link mit RMQ? Worker ist ein Abonnent von RMQ. Ja, Sie sollten die Anzahl der Mitarbeiter automatisch starten und manuell verwalten, RMQ tut dies nicht. – cantSleepNow

+0

Verbindung mit RMQ: Ich dachte, ich könnte nur einer bestimmten Warteschlange sagen, welcher Befehl ausgeführt werden soll ..., aber jetzt weiß ich zumindest, was diese Sache irgendwie macht.danke –

Verwandte Themen