tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
434
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Aruyan Aruyan ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    12
    Hallo Wissende,

    ich bin ein Neuling in AJAX und ich stehe vor einem komplizierten Problem:

    Vorerst: Ich habe google (sofern meine halbwegs intelligenten Suchwörter) und die Forensuche ausgiebig genutzt, aber nicht wirklich etwas passendes zu meinem Problem gefunden.

    Zum Problem:
    Ich möchte , dass sich ein Teil meiner Seite dynamisch nachlädt, sobald sich ein Datensatz in meiner Datenbank geändert hat.
    Und dies auch nur, wenn sich dieser Datensatz geändert hat.
    Ich möchte explizit keinen setTimeOut - Intervall von 1 Sekunde oder ähnlichem nutzen. (Hohe Traffic Erwartung)

    Ist sowas generell möglich?
    Und wenn JA : Wie ? (Hilfe, Referenzen, Dokumentationen oder Pseudo-Code würden mir sehr helfen)

    Danke im voraus,

    gruß,

    Aruyan
     

  2. #2
    Avatar von Chumper
    Chumper Chumper ist offline Eichhörnchen
    Registriert seit
    Mar 2006
    Ort
    Vancouver
    Beiträge
    440
    was du suchst ist ein sogenannter "Server Push" oder auch "Comet" genannt, meines Wissen ist das in PHP zwar möglich, aber nur mit einem Workaround, den du aber explizit ausgeschlossen hast.

    Ansonsten hier zwei Quellen: (Achtung, beide englisch.)
    http://www.zeitoun.net/articles/comet_and_php/start
    http://en.wikipedia.org/wiki/Comet_%...XMLHttpRequest

    und hier noch ein Artikel auf Deutsch:
    http://www.databay.de/homepage/de/to...et-server.html
    Geändert von Chumper (23.05.10 um 16:58 Uhr)
     
    mfg Nils

    Problem gelöst?
    Dann bitte das Thema als erledigt anhaken
    und die Antwort bewerten, die weitergeholfen hat.


    Danke!

  3. #3
    Aruyan Aruyan ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    12
    hmmmm ein "server push"..

    hab mich mal eben ein bisschen reingelesen:

    also tut Comet folgendes:

    Comet: serverseitiges Skript überprüft (bspw. alle 10 sekunden) auf Änderungen in der Datenbank -> wenn Änderung eingetreten, dann Ajax Request starten und Inhalte nachladen

    und

    AJAX: User löst Event Handler aus -> Request startet an serverseitiges Skript -> und erhält Response womit Inhalte nachgeladen werden.

    Sehe ich das richtig?
     

  4. #4
    Avatar von one6666
    one6666 one6666 ist offline Mitglied Titanium
    Registriert seit
    Jan 2010
    Ort
    Nordrhein-Westfalen
    Beiträge
    175
    Blog-Einträge
    1
    Das was du vorhast geht garnicht mit Javascript, nehnt sich aber Socket in Flash ist eine Socket Verbindung möglich,
    aber ist halt Flash, in der Zukunft von Javascript ist eine Socket Verbindung auch eingeplant aber bevor das mal kompatibel ist hast du dich für settimeout oder Flash entschieden
     

  5. #5
    Aruyan Aruyan ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    12
    Okay.

    Mir stellte sich nur die Frage ob es nicht unnötig viel Traffic verursacht, wenn man alle X Sekunden einen Request sendet und dieser ein Skript aufruft, der einen Query aus der Datenbank ausführt.
    Das würde ja nämlich bedeuten, dass jede X Sekunden ein Query ausgeführt wird, was theoretisch den Server schnell in die Knie zwingen könnte...
    Aber ich denke Versuch macht Kluch. Ich werde einfach das Traffic / Performance Verhalten analysieren und dann ggf. andere Wege einschlagen.

    Danke für die Hilfe jedenfalls
     

  6. #6
    Avatar von one6666
    one6666 one6666 ist offline Mitglied Titanium
    Registriert seit
    Jan 2010
    Ort
    Nordrhein-Westfalen
    Beiträge
    175
    Blog-Einträge
    1
    Du startest ja keine komplexen Abfragen, sondern schaust nur ob nach der letzten ID eine neue eingetragen wurde,
    und nur dann lädst du den Inhalt nach, das ganze ist so minimal das du es selber auch garnicht analysieren kannst

    MFG.one6666
     

  7. #7
    Aruyan Aruyan ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    12
    Ich hoffe es ist wirklich nur so minimal, wenn man jede Sekunde einen Query ausführt und auswertet
     

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    Zitat Zitat von Aruyan Beitrag anzeigen
    Ich hoffe es ist wirklich nur so minimal, wenn man jede Sekunde einen Query ausführt und auswertet
    Wie ressourcenraubend es sein wird, hängt zum grossen Teil davon ab, wieviel Besucher du erwartest...ich halte das für recht problematisch
    Auf jeden Fall solltest du vorher dein Server-Logging anpassen.
    Mein erster Versuch, soetwas zu machen(Chat) resultierte darin, dass in kürzester Zeit die Server-Logs so anwuchsen, dass mein verfügbarer Speicherplatz gesprengt wurde

    Um bspw. die Anfragen auf die DB zu vermeiden, könntest du so vorgehen:
    Bei jedem DB-Update speichere bspw. in einer Datei den aktuellen Timestamp.
    Den Request führe auf diese Datei aus und vergleiche den Timestamp mit dem zuletzt gelesenen....sind beide nicht identisch, laden das Gewünschte nach.

    Aber schaue dir lieber mal die Flash-Variante an.


    Und dies auch nur, wenn sich dieser Datensatz geändert hat.
    Was genau meinst du mit "dieser"?
     

  9. #9
    Aruyan Aruyan ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    12
    Flash kommt für mich leider nicht in Frage. Da gibts noch Randbedingungen für die Problemlösung und das wäre definitiv überspezifiziert. Danke Trotzdem für den Denkanstoß.


    mit "dieser Datensatz" meine ich nicht irgend einen Datensatz (das wäre ja viel zu allgemein) sondern eben nur einen spezifischen, den ich anhand einer ID selektiere.

    Bspw. ist die Tabelle so aufgebaut, dass ich 2 Spalten habe mit dem Primärschlüssel 'ID' und einem Feld 'status', in diesem zb "online", "offline", "abwesend" ...etc als Strings drin stehen.
    Dann soll nach Möglichkeit erst ein Request (Ohne selbst ausgelösten Event-Handler) , welches ein php skript ausführt, starten, wenn dieser Datensatz sich bei überführter ID sich geändert hat. Dieses PHP Skript soll dann nach per Select Query schauen ob bei der Datensatz eine Veränderung im Feld 'status' aufweist. Ist dies der Fall, soll der entsprechende neue Status als Resultergebnis zurück gesendet werden auf den User-Bildschirm

    Das Beispiel ist frei erfunden und sollte mehr die Problematik verdeutlichen (Ich hoffe mir ist das gelungen).

    Was den Speicherplatz sowie das Traffickonto angeht: Mir ist vollstens klar, dass ein time Intervall von 1 sekunde bei 10.000 Benutzern sehr viel unnötiger Datenverkehr entsteht - Dies gilt es zu verhindern.


    Ich gehe davon aus, dass ich ohne weitere Technologien nicht drum herum komme?

    Vielen Dank für die vielen Ideen!
     

  10. #10
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von Aruyan Beitrag anzeigen
    Was den Speicherplatz sowie das Traffickonto angeht: Mir ist vollstens klar, dass ein time Intervall von 1 sekunde bei 10.000 Benutzern sehr viel unnötiger Datenverkehr entsteht - Dies gilt es zu verhindern.


    Ich gehe davon aus, dass ich ohne weitere Technologien nicht drum herum komme?
    Ich befürchte, ja

    Bei 10000 Benutzern wird es aber generell problematisch, so oder so.
    10000 Verbindungen permanent offen zu haben, was die Alternative zur Abfrage in festen Intervallen wäre, wird auf Dauer recht teuer werden, denke ich.

    Ich würde daher eher empfehlen, darüber nachzusinnen, ob du dies Feature wirklich unbedingt brauchst.
     

  11. #11
    Aruyan Aruyan ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    12
    ok - danke für die hilfe
     

Ähnliche Themen

  1. Seiteninhalt mit onchange ändern
    Von marcelluzwallez im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 21.08.08, 20:00
  2. Antworten: 7
    Letzter Beitrag: 21.08.07, 23:58
  3. Textausgabe eines Datensatzes
    Von rafaelmann im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 02.06.05, 12:28
  4. Bestimmte Zeile einer Tabelle anhand eines Datensatzes ausblenden
    Von FlowersBeheaded im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 12.01.05, 16:25
  5. Ausdruck eines Wertes bei Anlegen eines neuen Datensatzes
    Von realmontanakid im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 19.10.04, 11:02