Я совершенно новый для SSE. Есть много простых/вводные тексты на сервер послал событияJavaScript, PHP - Использование серверных событий с несколькими уникальными пользователями?
Но ни один из них не коснуться, используя тот же файл SSE для нескольких различных пользователей.
Например:
У меня есть сайт, где входа пользователей в систему. При входе в систему они могут просматривать данные, которые являются уникальными и частными для них. Я хочу, чтобы каждый пользователь имел живые обновления во время их входа в систему, что может или не может содержать конфиденциальную информацию. Для этого я реализую сервера посланный события:
JS (Прямо из одного из звеньев)
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();
}
Но использовать его таким образом, Я только отправляю данные пользователю, который открыл источник sse.php
(т.е. каждый EventSource("sse.php")
- это новое, уникальное соединение)? Или все будут входить в систему, кто инициализировал соединение, получать те же данные?
This SO answer затрагивает несколько пользователей, с помощью уникальных событий:
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";
А потом слушать только для определенного события:
var evtSource = new EventSource("sender.php");
evtSource.addEventListener("ping", function(e) {
var obj = JSON.parse(e.data);
var r_msg = obj.msg;
Но это вряд ли представляется разумным. Если каждый пользователь должен получать свой собственный фид, этот метод потребует от меня жесткого кода уникального события для каждого пользователя. И, как упоминается в первоначальном ответе, он не мешает нескольким пользователям, превышающим средний уровень, перехватывать и читать все остальные сообщения.
И, помимо всего прочего, файл sse.php
не знает, для какого пользователя он собирает данные, поэтому он должен будет делать все пользователи все время.
Как создать файл sse.php
, который может обрабатывать неограниченное количество уникальных пользователей, а только отправить данные соответствующему пользователю? Итак:
должен быть способ отправить некоторые данные инициализации (то есть уникальный идентификатор пользователя) на стороне сервера файл, и
должен быть способ для только что один конкретный пользователь, чтобы получить полученная информация