Blog
  • Login

  • Connexion
  • Inscription
  • Blog

  • Articles
  • en
  • de

🎙️HttpChunk avec Flow

le 22 septembre 2025

Le traitement des réponses HTTP en chunks est un défi récurrent :

  • Plusieurs requĂŞtes doivent ĂŞtre lancĂ©es en parallèle.
  • Certaines Ă©chouent (404, timeouts) et nĂ©cessitent des retries.
  • Chaque utilisateur renvoie des donnĂ©es additionnelles (todos, posts), impliquant des requĂŞtes « fan-out ».
  • Le tout s’accumule rapidement en callback hell, gestion d’état manuelle, et tests difficiles.

Problématique :

HTTP chunk processing is complex when it should be fluid.

Le problème

En PHP, la gestion de flux HTTP asynchrones a souvent été abordée de manière impérative :

  • Callbacks imbriquĂ©s.
  • Variables d’état partagĂ©es.
  • DifficultĂ©s de test et de maintenance.

Ces approches rendent le code peu lisible, fragile et coûteux à faire évoluer.

La solution avec Flow

Le Flow Framework apporte une réponse fonctionnelle et élégante à cette complexité.

  • Jobs : des fonctions pures qui transforment des donnĂ©es.
  • Ips : des objets immuables qui transportent l’information entre les jobs.
  • Drivers : Amp, React, Swoole ou Fiber — abstraits derrière Flow.
  • Y-Flow : l’intĂ©gration du Y-Combinator pour gĂ©rer la rĂ©cursion sans boucles explicites.

Résultat : un pipeline clair, composable et testable, qui orchestre naturellement les flux asynchrones.

La démo : httpchunkflow.php

L’exemple concret :

php examples/httpchunkflow.php

Déroulement :

  1. Trois requĂŞtes initiales (/users, /users/404, /todos).
  2. Gestion des erreurs : un 404 est automatiquement retry vers /users/1.
  3. Y-Combinator : chaque utilisateur déclenche automatiquement des requêtes supplémentaires (/todos, /posts).
  4. Exécution concurrente : les requêtes s’exécutent en parallèle.
  5. Merge final : consolidation des données en un résultat structuré.

Extrait de logs :

*. #1 GET /users ... started
*. #2 GET /users/404 ... started
*. #3 GET /todos ... started
.* #2 404 -> retry /users/1
..* #1 chunks: parsing via Y
...* #101 QUEUED /users/1/todos
...* #1101 QUEUED /users/1/posts
.* #101 200 in 18ms
.* #1101 200 in 16ms
....* merging data
.....* finalizing results
User #1: Leanne Graham ([email protected])
  - Todos: 20 items
  - Posts: 10 items
DONE driver=Flow\Driver\AmpDriver duration=7.99s users=200 retry=1 errors=0

Les bénéfices

  • âś… LisibilitĂ© : plus de callback hell.
  • âś… PuretĂ© : chaque job est une fonction testable isolĂ©ment.
  • âś… ImmutabilitĂ© : flux de donnĂ©es clairs et prĂ©visibles.
  • âś… RĂ©cursion Ă©lĂ©gante : Y-Combinator au lieu de boucles impĂ©ratives.
  • âś… Async par design : Flow orchestre la concurrence naturellement.

Conclusion

Avec Flow et Y-Combinator, le traitement HTTP chunké passe d’un cauchemar impératif à une solution fluide et fonctionnelle. On obtient du code :

  • plus lisible,
  • plus testable,
  • plus maintenable.

Ressources

  • đź”— Flow Framework – GitHub
  • đź”— API de test – JSONPlaceholder
  • Plan du Site - Hello - Blog - Apps - Photos - Contact - - - - - Mentions lĂ©gales - Darkwood 2025, tous droits rĂ©servĂ©s