Question

Y at-il un moyen d'effacer le responseText d'un objet XHR sans détruire l'objet XHR?

Je dois garder une connexion persistante ouverte à un serveur Web pour fournir des données en direct à un navigateur. Le problème est, il y a une quantité relativement importante de données provenant par (plusieurs centaines de K par seconde en permanence), de sorte que l'utilisation de la mémoire est un gros problème, parce que cette connexion doit rester ouverte pendant au moins plusieurs minutes. responseText devient très grand très vite, même si le JSON retour j'envoie a été croqué aussi petit qu'il peut obtenir.

En raison de la façon dont l'application côté serveur fonctionne, si j'utilise de style AJAX court sondage et détruis tout l'objet XHR quand je suis fait avec elle, je manque d'importantes quantités de données importantes, même dans les quelques millisecondes prend pour analyser la réponse, créez un nouveau XHR et l'envoyer. Je n'ai pas la possibilité d'utiliser les requêtes qui se chevauchent, comme le serveur Web accepte une seule connexion à la fois. (Ne demandez pas.) Donc, la comète est exactement le modèle que j'ai besoin.

Ce que je voudrais faire est parse chaque morceau JSON comme il revient du serveur, puis déguerpir responseText pour que je puisse continuer à utiliser la même connexion. Cependant, responseText est en lecture seule. Il ne peut pas être directement vidé par une méthode que j'ai trouvé.

Y at-il une partie de l'image que je suis absent ici? Est-ce que quelqu'un sait des trucs que je peux utiliser pour libérer responseText quand je suis fait lire? Ou est-il un autre endroit les réponses du serveur peuvent aller?

Je ne suis pas parce que ce compris le code est vraiment presque une question de code agnostique. Les routines JavaScript qui fraient les requêtes XHR et manipulent les données renvoyées sont très, très simple.

Était-ce utile?

La solution

C'est juste comment fonctionne à long sondages. Vous gardez un index dans le dernier numéro de ligne lue et chaque tick de votre intervalle lu à partir de ce point. Il est une connexion longue, donc une réponse à long.

Une nouvelle responseText signifierait une nouvelle connexion. Mais alors il ne serait pas plus comète;)

Autres conseils

Contrairement à l'autre réponse, « à long polling » est pas une connexion longue. « Long polling » est de connexions dans l'ordre, chacun mis en place pour rester connecté pendant une période de temps suffisamment longue si aucune réponse est nécessaire. Ils faire temps (généralement autour 25-30s), puis rétablir une nouvelle connexion. Depuis HTTP1.1 permet de réutilisation des connexions existantes, la connexion ne doit pas être renégocié, et peut donc être rétablie pratiquement instantanément.

Alors, il suffit d'utiliser des demandes multiples. Comme il est vraiment en tête négligeable pour rétablir la connexion, et chaque nouvelle connexion vous permettra de détruire le texte de réponse précédente, c'est une solution parfaitement viable d'une performance / perspective des frais généraux, et permettrait de résoudre vos problèmes de mémoire ainsi.

[Modifier] Je parle d'expérience, comme l'un des auteurs de WebSync .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top