@Prtoy

Как правильно настроить Server-Sent Events в PHP?

Здравствуйте.

Пишу небольшое приложение, которое отображает некоторую информацию из БД. Так как информация должна обновляться часто, а клиентов много, то дёргать БД с каждого клиента не очень хорошо. Случайно узнал про 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 всё рвано дёргает информацию для каждого клиента отдельно...

Вопрос - как правильно сделать так, чтобы запросы к БД происходили один раз и результат отдавался клиентам?
  • Вопрос задан
  • 264 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы