Здравствуйте.
Пишу небольшое приложение, которое отображает некоторую информацию из БД. Так как информация должна обновляться часто, а клиентов много, то дёргать БД с каждого клиента не очень хорошо. Случайно узнал про Server-Sent Events и EventSource в JS, и решил попробовать.
PHP:
if ($_GET['get'] === 'data') {
header("Content-Type: text/event-stream");
header("Cache-Control: No-Store");
while (true) {
$data = file_get_contents("...", true); // обращение к файлу который дёргает БД и возвращает данные в JSON
echo "event: sendData\n\n";
echo 'data: ' . $data . "\n\n";
ob_end_flush();
flush();
if (connection_aborted()) {
break;
};
sleep(5);
}
}
JS React:
const eventSource = new EventSource('sse.php?get=data');
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
setData(data);
};
И всё вроде работает, но если я правильно понимаю, то всё равно каждый клиент подключается к sse.php - и хоть и с клиента запрос только один, но sse.php всё рвано дёргает информацию для каждого клиента отдельно...
Вопрос - как правильно сделать так, чтобы запросы к БД происходили один раз и результат отдавался клиентам?