События, отправляемые сервером, – это веб-API для подписки на поток данных, отправляемый сервером. Это открывает сетевой запрос на сервер, чтобы мы могли осуществлять потоковую передачу. Думайте об этом как об Обещании, которое никогда не исполняется. Легко реализуемый с использованием встроенного JavaScript или реактивного программирования для извлечения данных потока событий.
Laravel-Исходный код серверного приложения:
// HomeController.php
// import at the begining
use Symfony\Component\HttpFoundation\StreamedResponse;
//-----------------
class HomeController extends Controller
{
public function getEventStream() {
$random_string = chr(rand(65, 90)) . chr(rand(65, 90)) . chr(rand(65, 90));
$data = [
'message' => $random_string,
'name' => 'Sadhan Sarker',
'time' => date('h:i:s'),
'id' => rand(10, 100),
];
$response = new StreamedResponse();
$response->setCallback(function () use ($data){
echo 'data: ' . json_encode($data) . "\n\n";
//echo "retry: 100\n\n"; // no retry would default to 3 seconds.
//echo "data: Hello There\n\n";
ob_flush();
flush();
//sleep(10);
usleep(200000);
});
$response->headers->set('Content-Type', 'text/event-stream');
$response->headers->set('X-Accel-Buffering', 'no');
$response->headers->set('Cach-Control', 'no-cache');
$response->send();
}
}
//-----------------
// Application routes `web.php`
Route::get('/getEventStream', 'HomeController@getEventStream');
JavaScript-Интерфейсное приложение
// javascript
let evtSource = new EventSource("/getEventStream", {withCredentials: true});
evtSource.onmessage = function (e) {
let data = JSON.parse(e.data);
console.log(data);
};
Демонстрационное приложение
исходный код
Оригинал: “https://dev.to/mesadhan/event-stream-server-send-events-5afk”