Ergebnis 1 bis 7 von 7
  1. #1
    Amar ist offline Grünschnabel
    registriert
    02-06-2011
    Beiträge
    8

    Mehrere Daten empfangen innerhalb eines AJAX Requests

    Hallo Leute,

    ich habe folgendes PHP Script:
    PHP-Code:
    <?php
    header
    ("Content-Type: text/plain");

    echo 
    time( );
    flush( );

    sleep);

    echo 
    "|" time( );
    flush( );

    sleep );

    echo 
    "|" time( );
    flush( );
    ?>
    Hier möchte ich die jeweiligen Timestamps dann erhalten, wann sie gesendet werden.
    Führe ich diese Datei im Firefox ( 3.6.17 ) aus, sendet er mit genau alle 2 Sekunden einen Timestamp.

    Führe ich diese Datei via AJAX aus, sendet er mit leider alle auf einmal. Ich habe irgendwo einen Denkfehler drinne, vermutlich irgendwas blödes.

    Hier die ersteinmal die Logausgaben:
    Code:
    [1307034283.263] 1: 
    [1307034287.299] 2: 
    [1307034287.003] 3: 1307034283|1307034285|1307034287
    [1307034287.304] 4: 1307034283|1307034285|1307034287
    * In eckigen Klammern der Timestamp wann die Daten empfangen wurden
    * Vor dem Doppelpunkt steht der readyState des Requests

    Man sieht, State 1 wartet 6 Sekunden, bevor State 2 eintritt. Und in State 3 und 4 sendet er mir alle Informationen auf einmal.

    Hier mein Ajax Request aufs Mindeste beschränkt:
    Code:
    var xmlhttp = this.open( ); //generiert das xmlhttprequest object
    xmlhttp.open( "GET", this.url, true );
    xmlhttp.onreadystatechange = function( ) 
    {
    	//log message senden
    	trace( xmlhttp.readyState + ': ' + xmlhttp.responseText );
    };
    xmlhttp.send( );
    Wo liegt mein (Denk-)fehler?

    Vielen Dank für eure Hilfe.

  2. #2
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.933

    AW: Mehrere Daten empfangen innerhalb eines AJAX Requests

    Zitat Zitat von Amar Beitrag anzeigen
    Führe ich diese Datei via AJAX aus, sendet er mit leider alle auf einmal. Ich habe irgendwo einen Denkfehler drinne, vermutlich irgendwas blödes.
    Ja, das Design ist falsch. Du darfst nicht serverseitig pushen sondern musst clientseitig requesten. mit setTimeout einen sekündlichen Request machen und der Server sendet dann immer nur, was bis dahin anfällt. Also nicht serverseitig pausieren sondern clientseitig. Liegt daran, dass der Webserver den Kanal offen hält bis alles übertragen ist.

  3. #3
    Amar ist offline Grünschnabel
    registriert
    02-06-2011
    Beiträge
    8

    AW: Mehrere Daten empfangen innerhalb eines AJAX Requests

    Ah ok, vielen Dank.
    Leuchtet ein.

    Ich kann auch vermutlich nicht umgehen, dass bei jedem Request des Intervalls, mein PHP Script erneut ausgeführt wird. Ergo brauche serverseitig auch ein anderes Design, wo mein PHP Script via UNIX Socket oÄ sich die aktuellen Informationen holt und ausgibt.

    Oder kann man das vereinfachen?

  4. #4
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.933

    AW: Mehrere Daten empfangen innerhalb eines AJAX Requests

    Zitat Zitat von Amar Beitrag anzeigen
    Ich kann auch vermutlich nicht umgehen, dass bei jedem Request des Intervalls, mein PHP Script erneut ausgeführt wird. Ergo brauche serverseitig auch ein anderes Design, wo mein PHP Script via UNIX Socket oÄ sich die aktuellen Informationen holt und ausgibt.
    Serverseitig brauchst du zumindest einen anderen Ablauf.
    Ob der Rest anders gemacht werden muss läßt sich aufgrund der vorliegenden Informationen für Außenstehende nicht beurteilen. Dafür müsstest du mehr Angaben machen, worum es sich dreht.

  5. #5
    Amar ist offline Grünschnabel
    registriert
    02-06-2011
    Beiträge
    8

    AW: Mehrere Daten empfangen innerhalb eines AJAX Requests

    Hallo,

    also Client-Seitig ist mir klar was ich ändern muss.

    Serverseitig eigentlich auch, ich versuche nur, das Best-Of heraus zu finden, um die Codelesbarkeit einfach zu halten. Meine Azubis sollen das auch noch verstehen können.

    Folgendes ist das Szenario:
    Ich habe eine Platine die mir diverse Motoren in einer Maschine steuert. Die Platine bietet mir den Befehl "detect" um eine Tür zu öffnen, danach die Lichtschranke zu pollen und am Ende die Tür wieder zu schliessen.

    Dieser Befehl sendet mir 3 Informationen:
    1. Tür öffnet zu Beginn
    2. "Object einlegen" wenn er die Lichtschranke pollt
    3. Ready wenn Tür wieder geschlossen.

    Hier finde ich leicht heraus, wann der Anwender etwas in die Maschine gelegt hat

    Nun kam die Anforderung, einen Abbrechen Button auf der GUI zu implemtieren, der sobald der Anwender etwas hereingelegt hat disabled wird.

    Meine derzeitige Überlegung ist, dass ich zwei PHP Files benötige:

    a) Kommunikation mit der Platine.
    Dieses Script schreibt dann die Results und Zwischenresults der Befehle auf einen Stream / Socket.
    b) Schnittstelle zum AJAX.
    Hier wird nur ausgelesen ob etwas auf dem Stream / Socket steht.

    Hat jemand Erfahrung mit so etwas und kann mir ein besseres Design vorschlagen? Oder hab ich hier schon das schönste erwischt?!

    Grüßli

  6. #6
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.933

    AW: Mehrere Daten empfangen innerhalb eines AJAX Requests

    Vielleicht schaust du dir eine dritte Variante an, das Ajax Longpolling: http://wiki.ajax-community.de/tutori...comet-longpoll

    Möglicherweise ist das auch geeignet. Denn soweit ich das sehe wäre es für dich ja hilfreich, alle Aktionen möglichst umgehend im Client zu haben. Und allzu frequentiert ist die Anwendung vermutlich auch nicht.

  7. #7
    Amar ist offline Grünschnabel
    registriert
    02-06-2011
    Beiträge
    8

    AW: Mehrere Daten empfangen innerhalb eines AJAX Requests

    Hehe,

    ohne zu wissen wie das heist, habe ich es tatsächlich schon mehrfach verwendet.

    Also clientseitig kann ich die Longpolling Variante oder die setTimeout / setInveral Variante verwenden.
    Und serverseitig muss ich wohl oder übel ein Streambuffer oder Ähnliches verwenden, damit die Clientanfragen nicht immer das Script neu starten, sondern nur die Daten abrufen.

    Dann werdei ch mir mal für den Fall ein neues RPC Design überlegen, da meine jetzigen JSON RPCs das nicht unterstützen.

    Vielen Dank für deine Hilfe, schönes WE!

    Dennis

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 25-04-2011, 23:13
  2. Daten an SOAP WS senden und empfangen mittels Base64
    Von PranKe01 im Forum JavaScript
    Antworten: 23
    Letzter Beitrag: 25-01-2010, 15:21
  3. Mehrfache ajax requests
    Von larkasu im Forum JavaScript
    Antworten: 9
    Letzter Beitrag: 22-09-2009, 17:33
  4. parallele Ajax Requests ?
    Von JSer im Forum JavaScript
    Antworten: 62
    Letzter Beitrag: 27-03-2007, 13:00
  5. [AJAX] Mehrere Requests nacheinander ausführen
    Von fmueller im Forum JavaScript
    Antworten: 7
    Letzter Beitrag: 01-11-2006, 12:06

Lesezeichen

Berechtigungen

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