đïž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 :
- Trois requĂȘtes initiales (
/users,/users/404,/todos). - Gestion des erreurs : un 404 est automatiquement retry vers
/users/1. - Y-Combinator : chaque utilisateur dĂ©clenche automatiquement des requĂȘtes supplĂ©mentaires (
/todos,/posts). - ExĂ©cution concurrente : les requĂȘtes sâexĂ©cutent en parallĂšle.
- 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.