Сервер отправленных событий (SSE) работает с типом сообщения по умолчанию. Но я не могу заставить работать пользовательский тип события.
На клиенте у меня есть
const sse = new
EventSource('/api/events/transaction-event');
sse.onopen = (d=>console.log(d))
sse.addEventListener("message", function(e) {
console.log('message')
console.log(e)
})
sse.addEventListener("test", function(e) {
console.log('test')
console.log(e)
})
На сервере у меня есть
class Events
{
public function test(Request $request){
$response = new StreamedResponse(function() use ($request) {
while(true) {
// echo('event: test\n');
echo 'data: ' . json_encode(['hello'=>'world']) . "\n\n";
ob_flush();
flush();
sleep(2);
}
});
$response->headers->set('Content-Type', 'text/event-stream');
$response->headers->set('Connection', 'keep');
$response->headers->set('Cache-Control', 'no-cache');
return $response;
}
}
Запуск этогокод, вы можете видеть, что event: test\n
закомментирован, и я получаю SSE с типом message
в моем браузере. Но если я раскомментирую event: test\n
, чтобы попытаться изменить тип события на test
, прослушиватель на стороне клиента не будет вызываться (как и тип по умолчанию message
). Я что-то здесь упускаю? Спасибо за любую помощь.