bosselmann: AJAX-Push in Kombination mit php / perl

Hallo,

ich hab ein Problem und hocke schon seit zwei Tage dran - ohne Erfolg. Doch worum gehts? Ich habe auf meiner Homepage eine Möglichkeit, Bilder per AJAX hochzuladen (via iFrame). Jetzt möchte ich aber nach Möglichkeit das Bild zu einer begrenzten Zahl von anderen Clients pushen. Mein bisheriger Lösungsansatz: Speichere den Namen der Bilddatei in einer Text-Datei und lasse darauf per AJAX zugreifen. Ich weiß mittlerweile über die Techniken von AJAX-Push einigermaßen bescheid, weiß allerdings nicht, wie ich die Verbindung zwischen Client und Server aufrechterhalten soll, bis ein neues Bild hochgeladen wurde.

Hoffentlich war's nicht zu kompliziert erklärt :-)

And by the way: Gibt es eigentlich einen eleganteren Weg, eine Datei ohne Reload hochzuladen als mit einem iFrame? Hab leider nichts genaueres gefunden.

Schon mal danke.

  1. Hi,

    Ich habe auf meiner Homepage eine Möglichkeit, Bilder per AJAX hochzuladen (via iFrame).

    wie meinst du das genau?

    Jetzt möchte ich aber nach Möglichkeit das Bild zu einer begrenzten Zahl von anderen Clients pushen.

    Mit "pushen" meinst du, dass der Server von sich aus die Clients anstößt und ihnen mitteilt, dass es etwas Neues gibt? Das geht so nicht, das verträgt sich nicht mit dem Grundkonzept von HTTP, das da heißt: Der Client fragt an, der Server antwortet; pro Request gibt es genau einen Response.

    Was du mit "push" meinst, kann also nur über periodisches Polling durch den Client realisiert werden: Der Client fragt in kurzen Abständen an, ob etwas Neues vorliegt; und der Server antwortet: nein, nein, nein, nein, doch jetzt ja, nein, nein ...

    Ich weiß mittlerweile über die Techniken von AJAX-Push einigermaßen bescheid

    Ah ja? Da weißt du mehr als die meisten von uns.

    weiß allerdings nicht, wie ich die Verbindung zwischen Client und Server aufrechterhalten soll, bis ein neues Bild hochgeladen wurde.

    Ich ahne, was du andeutest: Du willst vom Client aus einen Request loslassen, und der Server zögert seine Antwort so lange hinaus, bis wirklich neue Daten für den Client vorliegen?
    Das wird nur in wenigen Fällen funktionieren. Im Regelfall musst du damit rechnen, dass der Client dann die Verbindung irgendwann wegen eines Timeouts beendet und auf die Antwort vom Server pfeift.

    Hoffentlich war's nicht zu kompliziert erklärt :-)

    Wenn's wenigstens überhaupt erklärt wäre ...

    And by the way: Gibt es eigentlich einen eleganteren Weg, eine Datei ohne Reload hochzuladen als mit einem iFrame? Hab leider nichts genaueres gefunden.

    Wenn du schon AJAX einsetzt, verstehe ich die Verwendung eines iframe-Elements tatsächlich nicht.

    So long,
     Martin

    --
    Wer im Glashaus sitzt, sollte Spaß am Fensterputzen haben.
    1. Hi,

      »» Ich habe auf meiner Homepage eine Möglichkeit, Bilder per AJAX hochzuladen (via iFrame).

      wie meinst du das genau?

      »»
      Nun, ich habe ein ganz normales Formular vom Typ "multipart/form-data" mit dem ich Dateien hochladen kann.

      »» Jetzt möchte ich aber nach Möglichkeit das Bild zu einer begrenzten Zahl von anderen Clients pushen.

      Mit "pushen" meinst du, dass der Server von sich aus die Clients anstößt und ihnen mitteilt, dass es etwas Neues gibt? Das geht so nicht, das verträgt sich nicht mit dem Grundkonzept von HTTP, das da heißt: Der Client fragt an, der Server antwortet; pro Request gibt es genau einen Response.

      Was du mit "push" meinst, kann also nur über periodisches Polling durch den Client realisiert werden: Der Client fragt in kurzen Abständen an, ob etwas Neues vorliegt; und der Server antwortet: nein, nein, nein, nein, doch jetzt ja, nein, nein ...
      Ich ahne, was du andeutest: Du willst vom Client aus einen Request loslassen, und der Server zögert seine Antwort so lange hinaus, bis wirklich neue Daten für den Client vorliegen?
      Das wird nur in wenigen Fällen funktionieren. Im Regelfall musst du damit rechnen, dass der Client dann die Verbindung irgendwann wegen eines Timeouts beendet und auf die Antwort vom Server pfeift.

      Und sonst gibt es wirklich keinen anderen Weg?

      »» And by the way: Gibt es eigentlich einen eleganteren Weg, eine Datei ohne Reload hochzuladen als mit einem iFrame? Hab leider nichts genaueres gefunden.

      Wenn du schon AJAX einsetzt, verstehe ich die Verwendung eines iframe-Elements tatsächlich nicht.

      Ich habe bislang noch keinen anderen Weg per AJAX gefunden, Dateien ohne Reload hochzuladen als mit einem iFrame.

      Gruß

      bosselmann

      1. Und sonst gibt es wirklich keinen anderen Weg?

        Möglichkeiten gibts viele, ob die für deinen Fall angemessen sind und überhaupt umsetzbar sind, steht auf einem anderen Blatt.

        Fragen wir mal so: Wo ist das Problem mit regelmäßigem Ajax-Polling? Wie schnell willst du die Infos auf den anderen Clients verfügbar machen? In einer Sekunde? In 10 Sekunden? In einer Minute? Was entwickelst du da und was ist der Zweck davon? Sitzen Leute wie gebannt vor ihren Rechnern und warten auf einen Upload? Muss das wirklich ultraschnell zur Verfügung stehen?

        Mathias

  2. ich hab ein Problem und hocke schon seit zwei Tage dran - ohne Erfolg. Doch worum gehts? Ich habe auf meiner Homepage eine Möglichkeit, Bilder per AJAX hochzuladen (via iFrame).

    Also hat es mit Ajax (XMLHttpRequest) nichts zu tun.

    Ich weiß mittlerweile über die Techniken von AJAX-Push einigermaßen bescheid,

    Offenbar nicht. Es gibt derzeit keinen echten Ajax-Push.

    weiß allerdings nicht, wie ich die Verbindung zwischen Client und Server aufrechterhalten soll, bis ein neues Bild hochgeladen wurde.

    Das geht nicht (browserübergreifend). Clients können lediglich regelmäßig Pollen, also beim Server nachfragen, ob es Neues gibt. Es gibt zwar Wege und Möglichkeiten, die Verbindung offenzuhalten, aber das geht meines Wissens nicht über längere Zeiträume hinweg.

    Gibt es eigentlich einen eleganteren Weg, eine Datei ohne Reload hochzuladen als mit einem iFrame?

    Nein. Höchstens per Flash (SWFUpload).

    Mathias

    1. Das geht nicht (browserübergreifend). Clients können lediglich regelmäßig Pollen, also beim Server nachfragen, ob es Neues gibt. Es gibt zwar Wege und Möglichkeiten, die Verbindung offenzuhalten, aber das geht meines Wissens nicht über längere Zeiträume hinweg.

      Ich hatte bisher auch noch nichts von AJAX Push gehört, da scheint es aber durchaus was zu geben.
      http://de.wikipedia.org/wiki/ICEfaces
      http://en.wikipedia.org/wiki/Comet_(programming)
      http://books.google.de/books?id=4rjik2KDugMC&pg=PA200&lpg=PA200&dq=AJAX-Push&source=bl&ots=t9DhUMLgak&sig=CMWwLU9tbPm55VdqruhWlDbboo0&hl=de&ei=WqLOSfCTLJWGsAbO9qyZCA&sa=X&oi=book_result&resnum=14&ct=result
      http://www.databay.de/homepage/de/tools-und-demos/php-comet-server.html

      Struppi.

      1. Comet läuft darauf hinaus, die Verbindung so lange wie möglich offen zu halten, Daten zu senden und die Verbindung, sobald sie geschlossen wird, wieder zu öffnen. Spezialfälle davon sind Transfer-Encoding: chunked und Content-Type: multipart/x-mixed-replace, welche (ich fasse es mal so zusammen) häppchenweises Senden von Inhalten ermöglichen. Schließlich gibts Server-Sent Events in HTML 5 - das kann bisher aber nur Opera soweit ich weiß.

        Alles mit ziemlichem Aufwand nutzbar, lohnt sich höchstens für Anwendungen wie Chats, bei denen es um Millisekunden geht. Wer unbedingt die Illusion von Echtzeit will und nicht klassisch mit Ajax pollen will, nimmt am besten serverseitige und clientseitige Fertigbibliotheken für Comet.

        Mathias

  3. Hai,

    And by the way: Gibt es eigentlich einen eleganteren Weg, eine Datei ohne Reload hochzuladen als mit einem iFrame? Hab leider nichts genaueres gefunden.

    Schau mal hier http://www.phpletter.com/Demo/AjaxFileUpload-Demo/

    MfG,
    Sympatisant

    --
    "If the future isn't bright, at least it is colorful"
    1. Gibt es eigentlich einen eleganteren Weg, eine Datei ohne Reload hochzuladen als mit einem iFrame? Hab leider nichts genaueres gefunden.
      Schau mal hier http://www.phpletter.com/Demo/AjaxFileUpload-Demo/

      Dabei wird auch nur ein iframe benutzt!

      Das kann man auch ohne ein aufgeblähtes Script und ein riesiges Framework machen.

      Man notiert ein normales Upload-Formular und lenkt es mit dem target-Attribut in ein unsichtbares iframe. Die Adresse, an die die Datei geschickt wird, gibt ein HTML-Dokument mit JavaScript zurück, das z.B. im darüberliegenden Dokument einen Complete-Handler aufrufen kann.

      Das ist alles. Man braucht keine 100 KB JavaScript dafür. Und es hat nichts mit Ajax zu tun, das ist im Grunde sogar ohne JavaScript möglich.

      Mathias

      1. Hai Matthias,

        Dabei wird auch nur ein iframe benutzt!

        Uh, so genau hatte ich mir das tatsaechlich nicht angeschaut.
        Aber man kann es ja auch in so weit umschreiben, dass der Upload mittels Ajax realisiert wird, und die hochgeladene Resource - in unserem Falle das Bild - dann dem Frontend hinzugefuegt wird.

        MfG,
        Sympatisant

        --
        "If the future isn't bright, at least it is colorful"
        1. Aber man kann es ja auch in so weit umschreiben, dass der Upload mittels Ajax realisiert wird

          Nein, kann man nicht.

          Mathias

          1. Hai Matthias,

            »» Aber man kann es ja auch in so weit umschreiben, dass der Upload mittels Ajax realisiert wird
            Nein, kann man nicht.

            Lakonie birgt oft mehr Fragen als Antworten in sich. Was kann man nicht? Das Script umschreiben? Ohne IFrame Bilder uploaden? Ging es dir nur um die Bibliothek? ??

            Denn mit diesem Script kann man durchaus Bilder uploaden. Ohne die Seite neuladen zu muessen, ohne die Einbettung in einen Iframe und mit direkter Darstellung des hochgeladenen Bildes.

            MfG,
            Sympatisant

            --
            "If the future isn't bright, at least it is colorful"
            1. Denn mit diesem Script kann man durchaus Bilder uploaden. Ohne die Seite neuladen zu muessen, ohne die Einbettung in einen Iframe und mit direkter Darstellung des hochgeladenen Bildes.

              Bist du sicher?
              Ich hab die Seite mal kurz überflogen (mich interessiert das Thema, im Augenblick nicht so), da steht:

              How it works?

              Plugin creates invisible file input on top of the button you provide, so when user clicks on your button the normal file selection window is shown. And after user selects a file, plugin submits form that contains file input to an iframe. So it isn’t true ajax upload, but brings same user experience.

              Kein iframe?

              Struppi.

              1. Hai Matthias, Struppi,

                OK, sry, ab jetzt bin ich still ;-)
                Ich habe die Bibliothek lediglich eingebunden, mich aber nicht mit dem Code beschaeftigt. Zur Einbindung braucht man keinen Iframe, von daher bin ich davon ausgegangen, dass dieser auch nicht verwendet wird. Aber es ist schon wahrscheinlich, dass auch ein Iframe verwendet wird.

                Also nichts fuer ungut..

                MfG,
                Sympatisant

                --
                "If the future isn't bright, at least it is colorful"
            2. Hallo,

              Ajax ist ein Interface-Konzept, bei dem es um die Vermeidung des Ladens immer neuer Dokumente geht. Stattdessen tauscht ein Dokument gezielt im Hintergrund Daten mit dem Server aus. Techniken dafür gibt es viele.

              DESHALB heißen diese ganzen Scripte »Ajax File Upload«. Es wird aber NICHT XMLHttpRequest verwendet, sondern immer ein Iframe, weil XMLHttpRequest für diesen Zweck nicht verwendet werden kann.

              Mathias