Bonjour,
Je rencontre un problème dont je ne me sors pas. J'espère que quelqu'un aura une idée.
Sur mon site WEB, j'ai une page qui utilise du Server-Sent Events pour afficher une sorte de log au fil de l'eau depuis le serveur.
Sur mon site OVH, j'ai un problème, les données ne sont pas envoyées au fil de l'eau comme elles devraient (et comme elles le sont sur mes environnements Php de dév et de test). Tout est envoyé à la fin du traitement comme si c'était bufferisé quelque part malgré toutes mes désactivations de buffers et mes flushs.
voici le code serveur utilisé pour reproduire le problème :
ini_set('output_buffering', 'off');
ini_set("zlib.output_compression", 0); // off
ini_set("implicit_flush", 1); // on
ob_implicit_flush(true);
ob_end_flush();
ob_end_clean();
header('Content-Type: text/event-stream');
header("Cache-Control: no-cache, no-store, must-revalidate");
for ($i = 1; $i <= 4; $i++) {
echo "id: ".$i.PHP_EOL;
echo 'data: '.date("Y-m-d h:i:s",time())." ping".PHP_EOL.PHP_EOL;
ob_end_flush();
flush();
sleep(5);
}
sleep(10);
print_r(ini_get_all());
?>
url de cette page de test : http://www.zeolitop.com/test/test.php
c'est censé :
- désactiver toutes les causes potentielles de bufferisation
- afficher un événement toutes les 5 secondes pendant 20 secondes
- attendre 10 secondes
- afficher l'environnement php
Ce que ça fait très bien sur tous mes environnement sauf sur mon hébergement ovh sur lequel ça affiche tout au bout de 30s comme si tout était bufferisé jusqu'à ce que le script se termine.
ma config ovh :
app.engine=php
app.engine.version=5.6
http.firewall=none
app.engine=phpcgi
environment=development
je n'ai rien trouvé dans la doc OVH et épuisé toutes mes idées…
J'espère que vous pourrez m'aider.
Avez vous tester en passant sur l'environnement plus récent ?
app.engine=php
app.engine.version=7.2
http.firewall=none
environment=production
container.image=stable
oui, c'est exactement pareil avec ces paramètres là.
ca n'a pas l'air de venir de la version de Php (idem en 5.6 et 7.2) ni du paramètre environment (idem en development ou en production)
Bonjour,
Avez vous reussi a regler votre problème?
J'ai exactement le même et je trouve aucune solution.
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
Ca marche très bien en server local (Apache) et me renvoie un Content-Type: text/html; charset=UTF-8 sur le serveur d'OVH.
A l'aide !!!
Oui, j'ai ouvert un ticket en leur décrivant le problème et ils m'ont répondu "c'est réglé".
En effet, cela fonctionnait.
Je vous suggère de faire la même opération
Bonjour
Meme problème la commande
ob_implicit_flush ne fonctionne pas
J'ai ouvert un ticket on va voir.
Merci,
Christophe
Le problème de buffering avec text/event-stream ressemble beaucoup à ce qu’on rencontre parfois sur RedBox TV : le flux se bloque ou prend du temps à charger. Tout comme pour le streaming de chaînes en direct, il faut s’assurer que la connexion est stable, que le serveur envoie bien les données en continu et que le cache est correctement géré. De cette façon, le contenu peut s’afficher sans interruption, un peu comme profiter d’une chaîne RedBox TV sans coupure.