Wer hilft mir mal mit den SSE weiter. Bin am verzweifeln.
Server-Code:
Client-Code:
Ich teste im Moment mit 3 verschiedenen Clients.
Auf Desktop Firefox und Safari,
und Iphone mit Safari.
Wenn ich ein SSE auslöse (Indem ich die Datei Daten.json verändere), kommt es immer nur an dem Browser an, der das SSE ausgelöst hat.
Die beiden anderen Clients bleiben stumm.
Woran kann das hängen?
Der Event-Listener ist doch auf allen Clients aktiv!?
Gruß Bernd
Server-Code:
PHP:
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$altezeit=1508857791; //hier wird nur ne Zeit gesetzt, die auf jeden Fall vor der aktuellen liegt.
while (1)
{
$filename = 'Daten.json';
if (file_exists($filename))
{
$neuezeit=filemtime($filename);
var_dump($neuezeit);
}
if ($neuezeit>$altezeit) //Wenn Timestamp neu, SSE senden
{
$altezeit=$neuezeit;
$h = fopen('Daten.json', 'r+');
if (flock($h, LOCK_EX))
{
$jsondata=file_get_contents('Daten.json'); //Hier werden nur die Json-Daten decodiert und dann gesendet
$obj=json_decode($jsondata);
echo "data: $jsondata\n\n";
@ob_end_flush();
@flush();
$obj->update = false;
fseek($h, 0);
ftruncate($h, 0);
fwrite($h,json_encode($obj));
}
flock($h, LOCK_UN);
fclose($h);
}
sleep(1);
}
?>
Client-Code:
Code:
$(document).on( "pagebeforeshow", "#home",function(event)
{
var evtSource = new EventSource("refresh.php");
evtSource.onmessage = function(e)
{
var Data=JSON.parse(e.data);
alert(e.data);
.............
.............
Ich teste im Moment mit 3 verschiedenen Clients.
Auf Desktop Firefox und Safari,
und Iphone mit Safari.
Wenn ich ein SSE auslöse (Indem ich die Datei Daten.json verändere), kommt es immer nur an dem Browser an, der das SSE ausgelöst hat.
Die beiden anderen Clients bleiben stumm.
Woran kann das hängen?
Der Event-Listener ist doch auf allen Clients aktiv!?
Gruß Bernd
Zuletzt bearbeitet von einem Moderator: