Client-Server Kommunikation während Scriptlaufzeit

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Client-Server Kommunikation während Scriptlaufzeit

    Hallo!

    Ich habe folgende Situtation: Ein PHP-Script wird vom User aufgerufen und benötigt etwa 30-120 Sekunden um ausgeführt zu werden (Mehrere 1000 Datenbankoperationen, Erstellen von PDF Dokumenten über 100 Seiten etc.), der User soll über den aktuellen Stand des Scripts informiert werden.

    Ich habe folgende Ideen um das zu realisieren:

    1.) Multiple Sites with Reload
    Aufteilen des Scripts in mehrere Teile, jeder mit einem reload der dann den nächsten Teil aufruft (eher ungünstig, da gewisse Grundinformationen jedes mal includiert bzw. von der DB gelesen werden müssen)

    2.) Filesystem/DB communication
    Das Script schreibt seinen Status regelmässig in eine Datei oder in eine DB, der Status wird via AJAX beim User regelmäßig aktualisiert. (Nachteil: Datei/DB-operationen sind verhältnismäßig langsamm)

    Hat jemand noch eine bessere Idee, bzw. welche der beiden würdet ihr bevorzugen?
    Gibt es eine Möglichkeit mit AJAX oder vergleichbarem den Status eines Serverseitigen Scripts ZUR LAUFZEIT abzufragen?

    Danke für Eure Unterstützung,
    tracer
    Zuletzt geändert von tracer99; 05.06.2006, 21:49.

  • #2
    Kannste knicken!
    Nagut, cronjobs könnten die Arbeit verrichten...
    Wir werden alle sterben

    Kommentar


    • #3
      wie wäre es mit einem iframe, welches ein meta refresh hat?
      (erst das erste iframe dürfte die DB Operation starten.)
      nicht ausprobiert aber kommt mir in den Sinn.

      Kommentar


      • #4
        na, dann doch lieber die ajax-operationen...

        Wenn dein Server nichts gegen die ausführungszeit von zwei Minuten hat, spricht auch nichts dagegen, mittels flush() in regelmäßigen Abständen den aktuellen Status (%) anzuzeigen.

        Kommentar


        • #5
          Das Problem hat man auch, wenn man einen Dateiupload baut:
          Man kann einen Fortschrittsbalken anzeigen, der mit jedem hochgeladenen KB wächst. Es ist dagegen nicht möglich, die Dauer des Vorgangs zu Beginn zu bestimmen.

          Du weißt (hoffentlich?), wieviele Aktionen dein Script insgesamt maximal ausführen soll. Das sind deine KB ...

          Kommentar


          • #6
            Die Ausführungszeit selbst ist kein Problem, die kann ich für jedes Script festlegen. In diesem Fall 5 min Timeout und 64MB Ram - funktioniert problemlos, nur wird der User nicht über den Stand informiert.
            Zuletzt geändert von tracer99; 05.06.2006, 21:50.

            Kommentar


            • #7
              bin auch für ajax... s zwar langsamer, muss aber nciht unbeding dafür das scripot komplett zerkegt werden.
              eine frage... wie kommsu auf mehrere tausende operatoren. wofür is das gedacht?
              Webdesign und Webentwicklung - Plunix.de

              Kommentar


              • #8
                Ist für eine Importfirma, der Versand folgt einmal wöchentlich - bei dem Script handelt es sich um den Wochenabschluss. Es werden Aufträge aus Bestellungen erzeugt, die Buchhaltungsdaten dazu erzeugt, Lieferscheine, Exportdokumente, Zolldokumente, Rechnungen, Packlisten etc. erzeugt, Sendungsinformationen an die Spediteure übertragen und noch ein paar andere "Kleinigkeiten". ;-)

                Kommentar


                • #9
                  Original geschrieben von TobiaZ


                  spricht auch nichts dagegen, mittels flush() in regelmäßigen Abständen den aktuellen Status (%) anzuzeigen.
                  Wie würde das bezüglich regulärem html gehen?
                  Ich denke an <html>...</html> flush(); und wie weiter?

                  Kommentar


                  • #10
                    wenn wir von regulärem html reden, dann ist dein ansatz schonmal falsch. nach </html> kommt nichts mehr!

                    Take a look at http://www.php-resource.de/tutorials/read/28/1/

                    Kommentar


                    • #11
                      Danke für den Tutorialpointer. Er macht es mit flush(); meine Frage wäre noch, ob es mit "regulärem" html überhaupt geht, Inhalt per flush() nachzuliefern bzw. zeitverzögert zu liefern.

                      iframe meta refresh funktioniert in IE und Firefox, das habe ich kurz angetestet. Ich denke, dass iframe-meta-refresh regulär ist (abgesehen dass refresh keine RFC), oder mit javascript ein iframe in einer zeitschleife neu zu laden.

                      Kommentar


                      • #12
                        mit regulärem HTML kanns eigentlich nicht gehen. Zumindest nicht valide (was ich zu regulär zählen würde). Aber mit JS gehts deutlich schöner als deine andauernden Refreshs.

                        Kommentar

                        Lädt...
                        X