Skip to content

fix(server): remplace ChunkedWriter artisanal par streaming sendContent#7

Open
tsabran wants to merge 1 commit intoF1ATB:mainfrom
tsabran:fix/serverHisto1an
Open

fix(server): remplace ChunkedWriter artisanal par streaming sendContent#7
tsabran wants to merge 1 commit intoF1ATB:mainfrom
tsabran:fix/serverHisto1an

Conversation

@tsabran
Copy link
Copy Markdown

@tsabran tsabran commented Mar 25, 2026

Note : correctif, documentation et description entierement générés par IA.
Je n’ai fait que décrire le problème et tester le résultat sur mon installation ESP32, qui semble corriger le problème chez moi.

Une explication plus détaillée de l'analyse et du changement est visualisable dans le fichier docs/fix_ajax_histo1an_streaming.md.

L'endpoint /ajax_histo1an retournait un 502 intermittent en production.

Cause : l'ancienne implementation de envoyerHistoriqueEnergie() construisait un JsonDocument complet en RAM, puis le serialisait via une classe ChunkedWriter custom qui ecrivait le framing HTTP chunked directement sur le socket TCP brut, en parallele de ce que WebServer gere deja. Cette interaction produisait des reponses mal formees ou tronquees.

Correction : remplacement par streaming natif WebServer.

  • setContentLength(CONTENT_LENGTH_UNKNOWN) + send() ouvre la reponse
  • chaque ligne CSV est emise immediatement via sendContent() au fil de la lecture
  • le framing chunked et la cloture TCP sont delegues a WebServer/lwIP
  • la classe ChunkedWriter est supprimee

Le contrat de donnees frontend (JSON { EnergieJour: [...] }) est inchange. Aucune modification dans JS_Accueil.h.

Fichiers :

  • Server.ino : reecriture envoyerHistoriqueEnergie(), suppression ChunkedWriter
  • docs/fix_ajax_histo1an_streaming.md : documentation du fix pour les reviewers

L'endpoint /ajax_histo1an retournait un 502 intermittent en production.

Cause : l'ancienne implementation de envoyerHistoriqueEnergie() construisait
un JsonDocument complet en RAM, puis le serialisait via une classe ChunkedWriter
custom qui ecrivait le framing HTTP chunked directement sur le socket TCP brut,
en parallele de ce que WebServer gere deja. Cette interaction produisait des
reponses mal formees ou tronquees.

Correction : remplacement par streaming natif WebServer.
- setContentLength(CONTENT_LENGTH_UNKNOWN) + send() ouvre la reponse
- chaque ligne CSV est emise immediatement via sendContent() au fil de la lecture
- le framing chunked et la cloture TCP sont delegues a WebServer/lwIP
- la classe ChunkedWriter est supprimee

Le contrat de donnees frontend (JSON { EnergieJour: [...] }) est inchange.
Aucune modification dans JS_Accueil.h.

Fichiers :
- Server.ino : reecriture envoyerHistoriqueEnergie(), suppression ChunkedWriter
- docs/fix_ajax_histo1an_streaming.md : documentation du fix pour les reviewers
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant