La fonction onreadystatechange de l'objet XMLHttpRequest peut être appelée n'importe quand, quand le navigateur le décide. Mettons que le serveur envoie deux « messages » en même temps. Il peut y avoir du buffering, on peut recevoir une partie du premier, puis sa fin et tout le deuxième message en entier, ou recevoir le tout en trois fois... Bref, il faut analyser le flux au fil de l'eau et trouver les messages dedans. Je ne sais pas si c'est plus clair dit comme ça.
C'est un truc que j'ai eu du mal à comprendre : quand tu parle de requêtes longues, tu parle en fait de multiplexer des requêtes.
Pour moi une requête longue et l'utilisation de long polling c'est surtout le fait que le serveur ne réponde pas au client tant qu'il n'a pas lui même la réponse. Il y a des méthodes pour limiter les risques de timeout en générant du trafic tcp, mais on reste sur une requête → une réponse.
Avec ce genre de multiplexage, je pense qu'il est intéressant d'éviter de recréer la roue et d'utiliser des méthodes plus éprouvé qu'au doigt mouiller. Le SEND de stomp par exemple est fait pour ça ou à minima un format fait pour être streamé comme yaml avec la séparation en document. Je n'ai jamais trop essayé, mais je me demande même si les bibliothèques json orientée streaming ne peuvent pas faire un truc sympas pour ça (tu stream un tableau json infini dont chaque élément est un message.
[^] # Re: Besoin de quelques éclaircissements
Posté par barmic 🦦 . En réponse à la dépêche Communiquer avec le serveur depuis un navigateur Web : XHR, SSE et WebSockets. Évalué à 3.
C'est un truc que j'ai eu du mal à comprendre : quand tu parle de requêtes longues, tu parle en fait de multiplexer des requêtes.
Pour moi une requête longue et l'utilisation de long polling c'est surtout le fait que le serveur ne réponde pas au client tant qu'il n'a pas lui même la réponse. Il y a des méthodes pour limiter les risques de timeout en générant du trafic tcp, mais on reste sur une requête → une réponse.
Avec ce genre de multiplexage, je pense qu'il est intéressant d'éviter de recréer la roue et d'utiliser des méthodes plus éprouvé qu'au doigt mouiller. Le SEND de stomp par exemple est fait pour ça ou à minima un format fait pour être streamé comme yaml avec la séparation en document. Je n'ai jamais trop essayé, mais je me demande même si les bibliothèques json orientée streaming ne peuvent pas faire un truc sympas pour ça (tu stream un tableau json infini dont chaque élément est un message.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll