Невозможно отправить пользовательские события с SSE и PHP - PullRequest
1 голос
/ 08 октября 2019

Сервер отправленных событий (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). Я что-то здесь упускаю? Спасибо за любую помощь.

1 Ответ

2 голосов
/ 08 октября 2019

Попробуйте изменить кавычки с:

// echo('event: test\n');

На:

echo("event: test\n");

Чтобы разрешить обработку новой строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...