ein gutes beispiel wäre das versenden einer e-Mail
sollte das Ergebnis des Versendens nicht unmittelbar an das Script zurückgegeben werden?
das ist nicht nötig, es sei denn es tritt ein nicht automatisch behebbarer fehler auf
klar, dass man dabei nicht weiterarbeiten konnte, es sei denn man öffnete eine neue instanz per browser
Ist das nicht a) gut so? b) bei einer Email im Millisekundenbereich?
Wenn Du es nur asynchron (parallel im Hintergrund) machen möchtest, nutze AJAX.
nein schön wäre es wenn ich sage "abschicken" und kann dann im selben fenster ganz normal weiter arbeiten
millisekundenberiech wohl eher nicht, da es sich nicht um reine text-mails handelt, und die internetverbindung dort nicht die schnellste ist, da kann das versenden einer mail schonmal ne minute dauern
mal ganz abgesehen von dem komischen mailserver der nach ca. 80 kb transferdaten ständig whitespaces sendet und ich ständig warten muss
ajax ist sicherlich ein teil dessen, was ich zum beispiel für eine fortschrittsanzeige verwenden möchte
während ich ganz normal weiterarbeite, kann per ajax irgendwo recht unten in der ecke ein fortschrittsbalken laufen, oder eine prozenanzeige
toll wäre es nun also, wenn ich einfach in ein journal schreibe "sende email mit der id 512"
nun stelle ich mir vor, wie eine art workerthread das journal ständig durchforstet, und dann den eintrag findet und ihn ausführt
Nun: warum sollte man das machen? So ist das eben bei der prozeduralen Programmierung und so ist es am effektivsten. Ich finde den gedanklichen Ansatz unpassend. Mit objektorientierter Programmierung (aber auch schon funktionsbasiert) und einem guten Konzept, kann man solche Tasks wunderbar auslagern, dass sie nicht im Script selbst stehen müssen.
im script selbst stehen die prozeduren sowieso nicht
somit könnte man also auch eine art aufgabenliste anzeigen, welche auch den fortschritt der verschiedenen aufgaben anzeigt
Logfile schreiben und ausgeben?
der anwender will sich kein logfile durchlesen, den anwender interessiert nur: was läuft (mail-versandt, db-optimierung, ...), welcher status (in warteschleife, in bearbeitung, fertig bzw. raus aus der liste), sind keine fehler aufgetreten
im prinzip sollte dieser thread, welcher php-code ausführen sollte, permanent laufen, also nicht erst durch einen seitenaufruf "angeschubst" werden,
Was permanent läuft, verbraucht permanent Ressourcen.
das ist korrekt, jedoch ist das denke ich bei einem dediziertem xeon nicht der rede wert ;)
sodass er halt auch mal nachts aufgaben wie datenbankoptimierungen durchführen kann ...
Dafür kannst Du in der Tat Cron Jobs verwenden.
wenn ich mich korrekt belesen habe, ist das linus / unix ...
aber wenn ich mir vorstelle, dass das unter win etwas ähnliches wie die aufgabenplanung ist, dann wäre ja im prinzip das unter umständen auch damit lösbar ...
eine sache muss ich mal festhalten: ich denke ein einzelner workerthread ist nicht unbedingt sinnvoll, sondern es müsste eine instanz eines workerthreads erstellt werden, der sich genau einer aufgabe annimmt
der nächste workerthread sieht nun, dass aufgabe 1 schon in bearbeitung ist, und schnappt sich, sofern vorhanden aufgabe 2, und so weiter
somit geht man auch dem problem aus dem weg: was ist wenn ein workerthread terminiert wird oder abstürzt? ganz einfach: der letzte nachvollziehbare punkt ist ja im journal, also kann nach einer gewissen zeitspanne (jeder workerthread schreibt auch ins journal wann er das letzte mal aktiv war, sagen wir mal alle 5 sekunden) ein neuer workerthread erkennen, dass dort offensichtlich die aufgabe, die zwar von einem thread übernommen wurde, jedoch der thread scheinbar nicht mehr existiert, neu übernommen werden
LG,
LSpreee
LG
mech ;)