Halihallo Forumer
vielleicht sollte ich meine Fragen nochmals etwas "zusammenfassen" (mir scheint selber, dass vorangegangenes Posting etwas "kompliziert" ist):
Meine GUI Programme liefern HTML Dokumente an den Client zurück (soviel war wohl klar). Nach dem ganzen HTML-Zeug werden jedoch noch einige andere Jobs abgearbeitet, die eigentlich gar nichts mit dem Client zu tun haben. Es geht nun darum, dass diese ohne grössere Programmierarbeiten in einen separaten Prozess verlegt werden (=>fork). Dies hat den Zweck, dass das eigentlich vom Client aufgerufene Programm _gleich_ beendet werden kann und somit der Webserver das generierte HTML Dokument an den Client sendet. Leider habe ich den Verdacht (bestätigt), dass der Webserver dennoch auf das Ende des Programmes wartet, auch wenn ich STDOUT, STDERR geschlossen habe und autoflushed habe, deshalb versuche ich es mit POSIX::_exit abzuwürgen (Apache "überlisten") und die etwas langsamen END-Blöcke in einem separaten Prozess abzuarbeiten.
Fragen:
- Gibt es eine andere Lösung, die Ausgabe (+ Übertragung an den Client!) explizit zu erzwingen, auch wenn das Programm noch läuft?
- Gibt es Sachen, die ich bei der Lösung über fork und POSIX::_exit beachten muss (Zombies), ich kenne mich mit dem nicht so wahnsinnig gut aus.
- Fällt euch eine andere, schnell umzusetzende Stategie ein?
Background:
Der Performancefresser ist ein Synchronisations-Modul auf E-Mail Basis, um gewisse Daten auf ein völlig unabhängiges System zu transferieren (die ganze genannte Webapp liesse sich als GUI-Interface zu einem Background-System bezeichnen). Nötig hierzu sind frequentierte Zugriffe auf POP und SMTP Server (bei SMTP sogar vorerst Zugriff auf POP-Server zur Authentication) und Analyse/Weiterverarbeitung der Daten des E-Mails. Diese Zugriffe habe ich schon mit einer "Frequenz" (Aktion nur jede Minute) verkleinert und noch verbessert durch eine Queue. Jedes senden generiert eine neue Queue. Das lesen des POP's muss folglich auch nur stattfinden, wenn eine Queue gesendet wurde; der Analyser springt erst an, wenn eine QueueID empfangen wurde etc. Fakt bleibt jedoch, dass immer ein Kunde länger auf die HTML Seite warten muss, da wiedermal im POP nachgeschaut werden muss, bzw. eine Mail versendet wird. Dies gilt es zu verhindern.
Umgebung/Voraussetzungen:
- Linux
- Apache
- Keine Möglichkeit auf Konfiguration des Webservers (dann ist das nicht die Wahl deines Providers, ich weiss)
- Perl
- aus internen Gründen keine Möglichkeit über sendmail
- kein cron
- Interface und Backgroundprogramm nicht änderbar
- nur noch 5 Tage Zeit ;) oder besser :-(((((
- durch Design und sonstige Überarbeitungen des
- Sourcecodes erschwert.
Viele Grüsse
Philipp
PS: Sehe ich hier den Wald vor lauter Bäumen nicht mehr? - Wäre froh, wenn mich einer auf die Erde zurückholt... Schliesslich will ich nach Brasilien! juhuii ;)