ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
434
434
EMPFEHLEN
-
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
-
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.htmlGeä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!
-
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?
-
23.05.10 19:39 #4
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
-
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
-
23.05.10 20:55 #6
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
-
Ich hoffe es ist wirklich nur so minimal, wenn man jede Sekunde einen Query ausführt und auswertet
-
Moin,
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.
Was genau meinst du mit "dieser"?Und dies auch nur, wenn sich dieser Datensatz geändert hat.
-
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!
-
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.
-
ok - danke für die hilfe
Ähnliche Themen
-
Seiteninhalt mit onchange ändern
Von marcelluzwallez im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 21.08.08, 20:00 -
Problem beim Ändern eines Datensatzes in SQL
Von Linus28 im Forum PHPAntworten: 7Letzter Beitrag: 21.08.07, 23:58 -
Textausgabe eines Datensatzes
Von rafaelmann im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 02.06.05, 12:28 -
Bestimmte Zeile einer Tabelle anhand eines Datensatzes ausblenden
Von FlowersBeheaded im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 12.01.05, 16:25 -
Ausdruck eines Wertes bei Anlegen eines neuen Datensatzes
Von realmontanakid im Forum .NET ArchivAntworten: 3Letzter Beitrag: 19.10.04, 11:02





Zitieren

Login





