PHP 8 SSE Kullanımı 2023

Php ile composer paket yüklemeden Server-Side Event kullanımı nasıl yapılır ? Event kullanımını araştırdığınızda oldukça demode bir yöntemin tüm kaynaklarda yer verildiğini görürsünüz, ancak güncel tarayıcılar bu demode yöntem işlevini yerine getirememektir. Bu sorunu çözmek için paket yüklemenize gerek kalmayacak şekilde çıktıyı tanımlanmanız gerekmektedir.
Saatlerimi harcadığım bu sorunun çözümü umarım ihtiyacınızı karşılayacaktır.

SSE.php

<?php


header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
header('X-Accel-Buffering: no'); // Nginx: unbuffered responses suitable for Comet and HTTP streaming applications

$i = 0;

function line(){
    global $i;

    $event = [];

    $event[] = sprintf(': %s', "event");

    $event[] = sprintf('id: %s',++$i);


    $event[] = sprintf('retry: %s', "no");

    $event[] = sprintf('event: %s', "veriseti"); // event adı


    $event[] = sprintf('data: %s', json_encode( ['message' => "Merhaba dünya"])); // event çıkısı

    return implode("\n", $event) . "\n\n";
}

while (true) {
  try {
      echo line();
  } catch (Exception $e) {
      return;
  }

  if (ob_get_level() > 0) {
      ob_flush();
  }

  flush();

  // if the connection has been closed by the client we better exit the loop
  if (connection_aborted()) {
      return;
  }
  sleep(1);
}

JS ile bu datayı nasıl yakalayacağımıza örnek bir kod

<!DOCTYPE html>
<html>
<head>
    <title>SSE Örneği</title>
</head>
<body>
    <div id="sse-data"></div>
    
    <script>
        const sseData = document.getElementById('sse-data');
        
            // withCredentials=true: pass the cross-domain cookies to server-side
        const source = new EventSource('sse.php', {withCredentials: true});
        source.addEventListener('news', function (event) {
            console.log(event.data);
            sseData.innerHTML += event.data;
        }, false);

     
    </script>
</body>
</html>

Server Side Event işlemini composer ile yapmak için hhxsv5 bu paketi projenize dahil edebilirsiniz.

Add a Comment

E-posta hesabınız yayımlanmayacak.