OK, danke für die Erklärung.
Habe jetzt nochmal komplett umgestellt, und verwende die Endlosschleife aus Posting 11. aber das bringt mich direkt wieder in neue schwierigkeiten. Ich komme einfach nicht weiter, und dreh bald durch
Zur Erläuterung erst nochmal um was es überhaupt geht. Denn vielleicht bin ich ja auf dem völlig falschen Dampfer:
Auf meiner Site gibt es eine dynamisch generierte Tabelle. Jeder User (ca 25) hat andere Werte drin in folgender Struktur:
Ich muss 1,50€ an Peter zahlen (Tabellenzeile: "Peter" ... "-1,50")
Peter kriegt 1,50@ von mir (bei ihm: "Ich"... "+1,50")
Die Daten werden jeweils in Localstorage gespeichert. Falls ein Handy kaputt geht/zurückgesetzt wird, sind die Daten futsch. Daher speichere ich nochmal auf dem Server in "Daten.json".
Das ganze funktioniert wunderbar. Aber nun habe ich folgende Pläne:
Wenn "A" einen neuen Wert einträgt, muss "B" diesen ja auch eintragen. Vergisst er dies, oder trägt was falsches ein, soll die Zelle rot werden. Stimmen beide überein--> grün.
Nun habe ich 2 Szenarien, bei beiden komme ich nicht weiter.
1.
Wenn ich die Daten in die "Daten.json" schreibe(Ajax-Post), schreibe ich zusätzlich die Änderung ("von wem", "für wen", "Wert").
In der Php überprüfe ich den Timestamp der Datei. Wenn der Timestamp < Alter Timestamp --> sende Daten(SSE). Dann ersetze alten Timestamp mit neuem Timestamp. Da die Schleife endlos läuft, müsste das ja funktionieren. Funktioniert aber nicht. Scheinbar ist alt und neu immer gleich.
2.
Ich sende dauernd die Änderungsdaten aus der "Daten.json". Unabhängig, ob geändert, oder nicht. Das wäre wohl am einfachsten.
Aber:
(Wir spielen ein Spiel) Alle 3-4 min geben 4 Personen Daten ein. Nun kann es ja passieren, dass 2 Leute (fast) gleichzeitig Daten eingeben. #1 lädt die Änderung hoch, #2 auch, bevor die 1Sek Loop gelaufen ist. Dann sind die Daten von #1 überschrieben, ohne verglichen worden zu sein.....
3. Hab auch schon mal über eine Datei nachgedacht, in der die Änderungen "gestapelt" werden. Dann müsste die (SSE)PhP die abgearbeiteten Änderungen vom Stapel wieder löschen. Weiß aber nicht, wie ich das bewerkstelligen soll. Ich glaub das gibt immer mehr traffic/overhead.
Sorry, wenn ich euch so mit fragen bombardiere. Aber das ist
mein erstes HTML5
mein erstes JQuery
mein erstes JavaScript
mein erstes PHP.
Hab mich halt gleich an ein großes Projekt gewagt. Hier kann man sehen, wie das ganze funktioniert (ohne Datenvergleich)
Habe jetzt nochmal komplett umgestellt, und verwende die Endlosschleife aus Posting 11. aber das bringt mich direkt wieder in neue schwierigkeiten. Ich komme einfach nicht weiter, und dreh bald durch
Zur Erläuterung erst nochmal um was es überhaupt geht. Denn vielleicht bin ich ja auf dem völlig falschen Dampfer:
Auf meiner Site gibt es eine dynamisch generierte Tabelle. Jeder User (ca 25) hat andere Werte drin in folgender Struktur:
Ich muss 1,50€ an Peter zahlen (Tabellenzeile: "Peter" ... "-1,50")
Peter kriegt 1,50@ von mir (bei ihm: "Ich"... "+1,50")
Die Daten werden jeweils in Localstorage gespeichert. Falls ein Handy kaputt geht/zurückgesetzt wird, sind die Daten futsch. Daher speichere ich nochmal auf dem Server in "Daten.json".
Das ganze funktioniert wunderbar. Aber nun habe ich folgende Pläne:
Wenn "A" einen neuen Wert einträgt, muss "B" diesen ja auch eintragen. Vergisst er dies, oder trägt was falsches ein, soll die Zelle rot werden. Stimmen beide überein--> grün.
Nun habe ich 2 Szenarien, bei beiden komme ich nicht weiter.
1.
Wenn ich die Daten in die "Daten.json" schreibe(Ajax-Post), schreibe ich zusätzlich die Änderung ("von wem", "für wen", "Wert").
In der Php überprüfe ich den Timestamp der Datei. Wenn der Timestamp < Alter Timestamp --> sende Daten(SSE). Dann ersetze alten Timestamp mit neuem Timestamp. Da die Schleife endlos läuft, müsste das ja funktionieren. Funktioniert aber nicht. Scheinbar ist alt und neu immer gleich.
PHP:
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$Altezeit=0;
while (1)
{
$Dateizeit=filemtime(Daten.json);
$string = file_get_contents("Daten.json");
$json_a = json_decode($string, true);
If ($Dateizeit<$Altezeit)
{
echo "event: ping\n";
echo 'data: {"user": "' . $json_a['change']['user'] . '","Gegner":"' . $json_a['change']['Gegner'] . '","Wert":"' . $json_a['change']['Wert'] . '"}';
echo "\n\n";
ob_end_flush();
flush();
$Altezeit=$Dateizeit;
}
sleep(1);
}
?>
2.
Ich sende dauernd die Änderungsdaten aus der "Daten.json". Unabhängig, ob geändert, oder nicht. Das wäre wohl am einfachsten.
Aber:
(Wir spielen ein Spiel) Alle 3-4 min geben 4 Personen Daten ein. Nun kann es ja passieren, dass 2 Leute (fast) gleichzeitig Daten eingeben. #1 lädt die Änderung hoch, #2 auch, bevor die 1Sek Loop gelaufen ist. Dann sind die Daten von #1 überschrieben, ohne verglichen worden zu sein.....
PHP:
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
while (1)
{
$string = file_get_contents("Daten.json");
$json_a = json_decode($string, true);
echo "event: ping\n";
echo 'data: {"user": "' . $json_a['change']['user'] . '","Gegner":"' . $json_a['change']['Gegner'] . '","Wert":"' . $json_a['change']['Wert'] . '"}';
echo "\n\n";
ob_end_flush();
flush();
sleep(5);
}
3. Hab auch schon mal über eine Datei nachgedacht, in der die Änderungen "gestapelt" werden. Dann müsste die (SSE)PhP die abgearbeiteten Änderungen vom Stapel wieder löschen. Weiß aber nicht, wie ich das bewerkstelligen soll. Ich glaub das gibt immer mehr traffic/overhead.
Sorry, wenn ich euch so mit fragen bombardiere. Aber das ist
mein erstes HTML5
mein erstes JQuery
mein erstes JavaScript
mein erstes PHP.
Hab mich halt gleich an ein großes Projekt gewagt. Hier kann man sehen, wie das ganze funktioniert (ohne Datenvergleich)