Ich bin brandneu auf SSE. Es gibt viele einfache/einführende Texte auf dem Server gesendet EreignisseJavaScript, PHP - Verwenden von serverseitigen Ereignissen mit mehreren eindeutigen Benutzern?
Aber keiner von ihnen berühren die gleiche SSE-Datei für mehrere verschiedene Benutzer verwenden.
Zum Beispiel:
Ich habe eine Seite, wo die Nutzer anmelden. Wenn sie angemeldet sind, können sie Daten anzeigen, die für sie eindeutig und privat sind. Ich möchte, dass jeder Benutzer Live-Updates erhält, während er eingeloggt ist und möglicherweise keine vertraulichen Informationen enthält. Um dies zu tun Ich bin der Umsetzung server gesendet Ereignisse:
JS (gerade aus einem der Links)
var source;
if (!!window.EventSource) {
source = new EventSource("sse.php");
} else {
...
}
source.addEventListener("message", function(e) {
... do stuff ...
}, false);
PHP
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
header("Connection: keep-alive");
while (true) {
$data = \\ query DB or any other source
if ($data) {
sendMessage($someID, $data);
}
sleep(2);
}
function sendMessage($id, $data) {
echo "id: $id\n";
echo "data: $data\n\n";
ob_flush();
flush();
}
Aber es auf diese Weise verwendet wird, Sendet ich die Daten nur an den Benutzer, der die Quelle sse.php
geöffnet hat (dh jede EventSource("sse.php")
ist eine neue, eindeutige Verbindung)? Oder werden alle, die sich angemeldet haben, wer die Verbindung initialisiert hat, die gleichen Daten erhalten?
This SO answer Berührungen auf mehrere Benutzer, durch einzigartige Events mit:
echo "event: ping\n";
$msg1="This is first user";
echo 'data: {"msg": "' . $msg1 . '"}';
echo "\n\n";
echo "event: notify\n";
$msg2="This is second user";
echo 'data: {"msg": "' . $msg2 . '"}';
echo "\n\n";
Und dann nur für ein bestimmtes Ereignis zu hören:
var evtSource = new EventSource("sender.php");
evtSource.addEventListener("ping", function(e) {
var obj = JSON.parse(e.data);
var r_msg = obj.msg;
Aber das scheint kaum angemessen. Wenn jeder Benutzer seinen eigenen privaten Feed erhalten soll, würde diese Methode erfordern, dass ich ein eindeutiges Ereignis für jeden Benutzer fest codiere. UND, wie die ursprüngliche Antwort erwähnt, es verhindert nicht, dass ein leicht überdurchschnittlicher Benutzer auch alle anderen Nachrichten abfängt und liest.
Und obendrein weiß die sse.php
Datei nicht, für welchen Benutzer es Daten sammelt, also müsste es alle Benutzer tun, die ganze Zeit.
Wie erstelle ich eine sse.php
Datei, die eine unbegrenzte Anzahl von eindeutigen Benutzern verarbeiten kann, und nur die Daten an den entsprechenden Benutzer senden? Also:
muss es eine Möglichkeit geben, einige Initialisierungsdaten (dh eindeutige Benutzer-ID) auf serverseitige Datei zu senden, und
muss es eine Möglichkeit sein, nur dass ein bestimmter Benutzer zu erhalten die gesammelten Informationen