События, отправленные сервером — это Интернет-стандарт, используемый для отправки данных на веб-страницы. Его JavaScript API построен вокруг объекта EventSource, который прослушивает события, отправленные с некоторого URL-адреса. События представляют собой поток данных (обслуживаемый MIME-типом text/event-stream
) в следующем формате:
data: This is the first message.
data: This is the second message, it
data: has two lines.
data: This is the third message.
Компонент HttpClient Symfony обеспечивает прочную основу для получения потоковых ответов. Вот почему в Symfony 5.2. представили новую функцию для использования событий, отправленных сервером, с помощью Symfony HttpClient.
Эта функция построена на новом классе EventSourceHttpClient
, который обертывает ваш обычный HTTP-клиент и передает отправленные сервером события в виде фрагментов потока:
use Symfony\Component\HttpClient\Chunk\ServerSentEvent;
use Symfony\Component\HttpClient\EventSourceHttpClient;
use Symfony\Component\HttpClient\HttpClient;
$client = HttpClient::create();
$client = new EventSourceHttpClient($client);
// this is the URL that sends server events
$source = $client->connect('https://localhost:8080/events');
while ($source) {
foreach ($client->stream($source, 2) as $r => $chunk) {
if ($chunk->isTimeout()) {
// do something ...
continue;
}
if ($chunk->isLast()) {
// do something ...
return;
}
// this is a special ServerSentEvent chunk holding the pushed message
if ($chunk instanceof ServerSentEvent) {
// do something with the message
}
}
}