Streaming avec Ruby on Rails. Quel équivalent en Ruby pour la fonction flush de PHP ?

Il peut arriver d’avoir besoin de générer une page web dont le contenu apparaisse au fur et à mesure. Dans la plupart des langages, c’est à la charge du développeur de gérer son flux de donnée. Ce qui est généralement caractérisé par l’appel de la fonction flush. On réalise alors du streaming.

On pourrait utiliser de l’AJAX, mais dans certains cas cette technique n’est pas approprié. Par exemple si votre traitement est long et que vous êtes capable de générer une partie du résultat, vous pouvez flusher votre stream à chaque itération.

1 – En PHP

En PHP, on pourrait faire comme ceci. La fonction str_pad est utilisée pour ajouter des espaces blanc après la chaine que l’on souhaite affiché. On peut utiliser cette technique pour forcer les navigateurs internet à rafraichir la page car la plupart ne le fond qu’après réception d’une certaine quantité d’octets. Les espaces blancs n’étant pas interprété en HTML, cela n’aura aucune incidence sur la page affiché à l’utilisateur.

for($i=0;$<=10;$i++){
   echo str_pad("loop: $i",5000);
   flush();
   sleep(5);
}

2 – Avec Ruby on Rails

La version Ruby on Rails est plus simple, effectivement, il suffit d’appeler out.write et le flush est automatique. Par contre il est nécessaire de générer l’affichage dans le contrôleur. La méthode ljust de l’objet string a la même utilité que str_pad en PHP.

(1..10).each do |i|
   out.write "loop: #{i}"
   out.write " ".ljust(5000)
   sleep(5)
end

Articles similaires :

Mots-clefs : , , , ,

Laisser une réponse