Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Reverse Ajax

  1. #1
    Trojaner
    Registriert seit
    11.07.2009
    Beiträge
    65

    Idee Reverse Ajax

    Ich bin gerade auf etwas cooles gestossen und wollte es euch nicht vorenthalten.

    Und zwar geht es um eine Technik, die sich reverse Ajax, Comet, ForeverFrame etc. nennt.

    Es ist eine Lösung des Polling Problems auf das ich gestossen bin.

    Da man normalerweise nur Anfragen an den Server vom Client/Browser machen kann, aber nicht umgekehrt, wird einfach die Server-Antwort solange zurückgehalten bis am Server ein Ereignis eintritt.
    Darauf wird ein Event ohne verzögerung direkt an den Client geschickt.

    Hier ein kleiner beispiel-Source:

    index.php
    PHP-Code:
    <html>
    <
    head>
        <
    title>ForeverFrame</title>
        <
    script type="text/javascript">
            function 
    push_event(keyvalue) {
                if (
    key "key" ){
                    
    document.getElementById('test').innerHTML value;
                }
            }        
        </
    script>
    </
    head>
    <
    body>
        <
    h3>ForeverFrame Test</h3>
        <
    hr/>
        <
    p id="test">---</p>
        <
    iframe src="test.php" width="0" height="0" frameborder="0"></iframe>    
    </
    body>
    </
    html
    test.php
    PHP-Code:
    <?php
        Header
    ("Content-type: text/html");
        
    Header("Cache-Control: max-age=0");
        echo 
    '
        <html>
        <head>
            <script type="text/javascript">
                function push() {
                    parent.push_event("key", "'
    .rand(1,100).'");
                    document.location = "test.php";
                }        
            </script>
        </head>
        <body onLoad="javascript:push();">
        </body>
        </html>'
    ;
        
    Sleep(5);
    ?>
    Wollte es mal posten, da ich es ziemlich genial finde

    mfg

  2. #2
    cookie power :D Avatar von cookie-exploit
    Registriert seit
    16.02.2010
    Beiträge
    249

    Standard

    hmm..nicht schlecht


    The quieter you become, the more you are able to hear...

  3. #3
    W32.FunLove
    Registriert seit
    15.06.2007
    Beiträge
    140

    Standard

    Verstehe den Sinn von dem ganzen nicht. Das ganze funktioniert doch genau so mit AJAX. Ist doch dann sogar noch viel cooler!

    Mit jQuery
    HTML-Code:
    <script type="text/javascript">
    $.get('laden.php', function(data) {
      alert(data);
    });
    </script>
    PHP-Code:
    <?php

    while($random != 1)
    {
        
    $random rand(0100);
        
    usleep(100);
    }

    ?>
    Statt dem rand() kann man dann auch alle 0.5 Sekunden eine MySQL Abfrage machen und hat somit ein (fast) echtes Push! Man sollte nur darauf achten, dass PHP-Scripte nach 30 Sekunden abgebrochen werden und man dem nur (effektiv) durch ein header('Location: laden.php'); entgegenwirken kann. Eine verlängerte Runtime zieht nach meinen Benchmarks mehr Leistung. Nach 2 Minuten sogar das doppelte!

  4. #4
    Trojaner
    Registriert seit
    11.07.2009
    Beiträge
    65

    Standard

    ja ich denke nur das eine abfrage alle 0,5 sekunden etwas übertrieben ist? Jedes mal eine neue verbindung?

    ist da meine lösung nicht besser?

    wäre cool wenn du deine benchmarks näher erläutern wüdest
    „Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren.“

    Benjamin Franklin

  5. #5
    Stanley Jobson Avatar von GregorSamsa
    Registriert seit
    23.08.2008
    Beiträge
    729

    Standard

    So genial ist die Lösung nicht, da du stattdessen genausogut alle 5 sek. per Ajax eine Abfrage machen kannst.
    Mit richtigem Cache und angepassten Scripten ist das noch um einiges Resourcenschonender.

  6. #6
    W32.FunLove
    Registriert seit
    15.06.2007
    Beiträge
    140

    Standard

    Es ist ja nicht jedes mal eine neue Verbindung. Ich habe mich vielleicht etwas krumm ausgedrückt! Alle 0,5 Sekunden würde ich einen Query an die Datenbank schicken.... die Verbindung zum Script bleibt per Ajax erhalten.

    Dass die Lösung nicht genial ist sehe ich auch so, aber dadurch kann man eben z.B. in Javascript direkt mit dem Server kommunizieren (und auch andersherum) und hat keinerlei Verzögerungen mit einzurechnen!

  7. #7
    Stanley Jobson Avatar von GregorSamsa
    Registriert seit
    23.08.2008
    Beiträge
    729

    Standard

    Ich meinte auch die Lösung vom Threadstarter.

    Und Erfahrungsgemäß würde ich sagen, dass bei einer normalen Anwendung alle 5 sek. auf jedenfall genug ist!

    Und AJAX andersherum geht nicht direkt ohne dauerhafte Verbindung - und die hält normal nicht ewig wegen Timeout's - HTTP ist halt nicht für dauerhafte Verbindungen ausgelegt, außer z.B. bei Dateidown/uploads - aber effektiv ist HTTP nunmal ein System das einen Block Daten schickt pro Verbindung, nicht wie z.B. das IRC Protokoll.

  8. #8
    Trojaner
    Registriert seit
    11.07.2009
    Beiträge
    65

    Standard

    danke für eure antworten. ich habe jetzt eine bessere lösung.

    und zwar heißt die "ajax long polling"
    Code:
    Ajax Request --> PHP Script [bleibt in einer Schleife bis zum Server-Ereignis]
              ^                             |
              |                             |
              '----[Auf Seite anzeigen] ----'
    „Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren.“

    Benjamin Franklin

  9. #9
    Stanley Jobson Avatar von GregorSamsa
    Registriert seit
    23.08.2008
    Beiträge
    729

    Standard

    Zitat Zitat von GregorSamsa Beitrag anzeigen
    Und AJAX andersherum geht nicht direkt ohne dauerhafte Verbindung - und die hält normal nicht ewig wegen Timeout's - HTTP ist halt nicht für dauerhafte Verbindungen ausgelegt, außer z.B. bei Dateidown/uploads - aber effektiv ist HTTP nunmal ein System das einen Block Daten schickt pro Verbindung, nicht wie z.B. das IRC Protokoll.
    Damit meinte ich, dass du gucken musst das es keine Timeout's gibt - standartmäßig bricht PHP z.B. nach 30sek. ab...

  10. #10
    W32.FunLove
    Registriert seit
    15.06.2007
    Beiträge
    140

    Standard

    Dieses "ajax long polling" ist ja im Endeffekt genau das, was ich beschrieben habe. Die Laufzeit eines Scripts lässt sich in dem Fall ja ziemlich simpel modifizieren. Wie ich auch schon weiter oben geschrieben haben kann man mit einem simplen header("Loaction: selbedatei.php?nocache=".time()); . Der Browser (so zeigt es zumindest Firebug) macht dabei einfach ein neues Request (bekommt JavaScript jedoch nicht mit - denkt immernoch, dass es die alte Datei lädt).

    Das http dafür nicht gedacht ist, ist klar! Wenn man es aber nun unbedingt braucht, ist dies sicherlich eine akzeptabele Lösung!

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •