• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Echtzeit MySql auslesen ohne "event"

Michael1971

New member
Ich such schon lang nach einem Tutorial, finde aber keines. Weiß vielleicht jemand wie man folgendes macht?:

In eine MySQL Datenbank werden ständig neue Termine (wir sind ein SingleClub) eingetragen.

Um mir das anzusehen was die Kollegen schreiben, lade ich eine PHP Website alle paar Stunden neu.

ABER: Mit Ajax sollte das ja in Echtzeit gehen - so das ich das ständig in einer geöffneten Website sehen kann.

Nur wie? Ich finde kein Tutorial dazu. Immer geht man von einem "Klick" aus - und DANACH wird auf die Datenbank zugegriffen. Aber das will ich ja nicht. Es soll ja in Echtzeit kommen.

Bitte um Hilfe!

Alexandra aus Wien
 
pullen ist aber ein sehr unsauberer weg. Ich würde es wie folgt machen:
1) Installieren von sys_exec (Erklärung um was es geht: Bernardo Damele A. G.: Command execution with a MySQL UDF).
Damit ist es nun möglich aus mysql heraus system calls aufzurufen.
2) Setzten eines triggers auf die INSERT methode von der Tabelle die dich interessiert.
3) Im Triggerbody rufst du nun sys_exec('echo "1" > ./newDataAvailable.txt') auf. (Also eine 1 wird in die Datei newDataAvailable.txt geschrieben)
4) Ein php script welches dauerhaft in einer schleife läuft (sleep) und dabei prüft ob sich in newDataAvailable.txt eine 1 oder 0 befindet (dann auf 0 setzten) und Daten zu deiner Clientanwendung pusht (HTML5 EventSource als Stichwort)

Vorteile:
Anstatt das deine Clientanwendung alle paar sekunden pullen muss um an evtl Datenbankveränderungen zu kommen, gehen wir den umgekehrten Weg und lassen unser Produktivsystem vom Server aktiv informieren.
Wir haben nicht bei jedem pull vorgang (oder Schleifendurchlauf) eine Verbindung zur Datenbank, sondern die Datenbank informiert unseren Server über die Änderung. Viel Performanter / Eleganter wie ich finde!

Lg Kasalop

EDIT: nachteil: Du benötigst Shellzugriff auf den Server, da du sys_exec installieren musst. Wenn du das nicht hast, dann ruf deinen Provider an und bitte ihn dies bei dir zu installieren. Bei einem guten Support wird er diesem Wunsch nachkommen.
 
Riesen unterschied! Das eine pullt auf eine einfache Datei (sehr schneller Zugriff, kein overhead und nur das Dateisystem beteiligt | Im Gegensatz dazu das Pullen aus dem Browser herraus: mit js, php, SQL-server)
Ich hab die einfache Variante geschildert. Aber wenn hier so pfennigfuchser sind ;P hier nochmal eine Variante ohne pullen:
3) hier ruft man nun einfach per sys_exec ein php script auf, welches eine netzwerkconnection zu localhost:12345 (oder welcher port auch immer belieben mag ;)) aufbaut.
4) Hier nehmen wir nun ein kleines script welches auch in einer Schleife läuft aber per socket_listen auf einkommende Verbindungen wartet. Hierbei wird das Skript angehalten bis Daten auf dem Port kommen, sie können abgerufen werden geflusht werden und dann wird wieder an der selben Stelle gewartet. Hierbei übernimmt das Betriebssystem alles für einen und wir haben kein Pullen mehr.

Besser? Wollte nur dem TE nicht zumuten auch noch einen socketserver zu programmieren für diese Aufgabe.


In welchem Browser soll das denn laufen? Denn nicht alle Browser unterstützen EventSources...
also echt... Kindergarten oder was. Der eine kritisiert mein "soft Pullen" (wenn man es so nenen kann) und ich denke gerade DU weißt was ein polyfill ist. Gibt auch Implementationen für EventSource. Damit kann es dann jeder Browser der auch Ajax unterstützt. und wenn endlich mal html5 vollunterstützt wird und auch der IE sich herablässt es zu unterstützt sind es alle Browser die auf Desktop PCs laufen, kann man das polyfill ja wieder rauswerfen. Außerdem verbietet dir ja auch niemand von Hand einen Fallback zu schreiben. Bitte aber bis hin zu: Ich hab in meinem browser js ganz deaktiviert ;)

---
Die Vorteile sind ja aber wohl offensichtlich oder? Wir haben aus einem Problem, was man bisher meist nur durch pullen lösen konnte (wie kkapsners Ansatz Beispielsweise) ein Eventgesteuertes System erstellt. Das ist geil Leute und rechnet es wenns euch interessiert doch mal durch mit ner website die mehr als 5 Besucher hat und ihr werdet sehen was das für eure Ressourcen bedeutet :)

Lg Kasalop

EDIT: grad beim nochmal drüberlesen gemerkt: @kkapsner klingt böser als ich es meinte ^^ nimms mir net krum. war nur beim ersten lesen ein Anflug von: Als ob man das nicht lösen könnte *mit den augenroll* Grad Websockets und EventSource sind so viele gute polyfills draussen, das es daran nicht scheitern wird. Aber saß beim schreiben hier ganz gespannt, also bitte net angegriffen fühlen ;)
 
Zuletzt bearbeitet:
@Kasalop: die Frage war nicht an dich gerichtet, sondern an den Fragestellen - wenn dessen Browser das nicht unterstützt, macht ein polyfill (wenn er nicht auf Flash aufbaut...) auch nichts anderes als zu pollen - ansonsten sind EventSources natürlich viel effizienter/eleganter/resourcensparender... wollte nur darauf hinweisen.
Wenn wir schon auf HTML5 Features gehen, würde ich aber gleich auf WebSockets gehen - da kann ich dann auch gleich die Daten mitschicken.
 
hi kkapsner,

achso^^ naja fühlte mich halt angesprochen ;)

Wieso websockets nehmen, wenn er nur eine Verbindung in die eine Richtung braucht? Das wäre doch ein bisschen übertrieben. Wieso nicht EventSource nutzen? Das wäre für seinen Fall wo er einfach nur ein update der clientanwendung durch den server haben möchte perfekt?!

Klar macht ein Polyfill was anderes als handelsübliches pollen. nen Longpoll zum beispiel. Alleine der ist schon deutlich sparsamer als ein handelsübliches pollen.

Lg Kasalop

PS: aber klar. wo du recht hast: der TE muss sich bewusst sein, dass er heute noch nen polyfill verwenden sollte. Gibt noch genug browser die es nicht von haus aus unterstützten und daher das polyfill brauchen.
 
Stimmt du hast recht - hatte irgendwie im Hinterkopf, dass man mit EventSources keine Daten senden kann, was aber schon der Fall ist...
 
Zurück
Oben