2008-09-17 7 views
1

Comment mesurer combien de temps un client doit attendre une demande. Sur le côté serveur, c'est facile, grâce à un filtre par exemple. Mais si nous voulons prendre en compte le temps total y compris la latence et le transfert de données, cela devient difficile.Mesure du temps de transfert réseau total à partir des servlets

est-il possible d'accéder à la socket sous-jacent pour voir quand la demande est terminée? ou est-il nécessaire de faire quelques astuces javascript? peut-être à travers la synchronisation de l'horloge entre le navigateur et le serveur? Y a-t-il des javascripts premade pour cette tâche?

Répondre

2

Vous ne pouvez pas savoir combien de temps le client a dû attendre du côté serveur. Vous aurez besoin de JavaScript. Vous ne voulez pas synchroniser les horloges client et serveur, c'est exagéré. Il suffit de mesurer le temps entre le moment où le client fait la demande, et quand il a fini d'afficher sa réponse. Si le client est AJAX, cela peut être assez simple: appelez new Date(). GetTime() pour obtenir le temps en millisecondes lorsque la requête est faite, et comparez-le au temps après que le résultat soit analysé. Envoyez ensuite ces informations de synchronisation au serveur en arrière-plan. Pour une application non-AJAX, lorsque l'utilisateur clique sur une requête, utilisez JavaScript pour envoyer l'horodatage actuel (du point de vue du client) au serveur avec la requête et renvoyez ce même horodatage à le client lorsque la page résultante est rechargée. Dans le gestionnaire onLoad de cette page, mesurez le temps écoulé total, puis renvoyez-le au serveur, soit en utilisant XmlHttpRequest, soit en ajoutant un argument supplémentaire à la requête suivante faite au serveur.

+0

Le problème avec cette approche est qu'elle ne peut pas être ajoutée de manière transparente à une implémentation non-ajax existante. il sera difficile d'ajouter le paramètre de date supplémentaire à chaque requête faite, mais cette méthode semble vraiment mesurer le temps total nécessaire pour se déplacer de client-serveur-client. –

0

Vous pouvez définir un tampon d'envoi de socket de 0 octet (et je ne le recommande pas vraiment) de sorte que lorsque vous bloquez l'appel à HttpResponse.send(), vous avez une idée plus précise du moment où le dernier octet est parti. le temps n'est pas inclus. Ekk - Je me sens mal à l'aise pour même le mentionner. Vous pouvez le faire dans Tomcat avec les paramètres spécifiques au connecteur. (Tomcat 6 Connector documentation)

Ou vous pourriez trouver une sorte d'approche d'horodatage javascript, mais je ne m'attendrais pas à régler l'horloge du client. Plusieurs appels au serveur Web devraient être faits.

  • horodatage requête
  • la demande réelle
  • la communication des données

Et cette approche couvrirait la latence, même si vous avez encore quelques variance de gigue.

Hmmm ... problème intéressant que vous avez là. :)

3

Si vous souhaitez le mesurer à partir de votre navigateur pour simuler n'importe quelle demande client, vous pouvez regarder l'onglet net dans firebug pour voir combien de temps chaque partie de la page à télécharger et la commande de téléchargement.

3

Vous pouvez placer l'objet HttpServletResponse et le OutputStream renvoyés par HttpServletResponse. Lorsque la sortie commence à écrire, vous pouvez définir un startDate, et quand il s'arrête (ou quand il est vidé, etc.), vous pouvez définir un stopDate.

Ceci peut être utilisé pour calculer le temps nécessaire pour retransmettre toutes les données au client.

Nous l'utilisons dans notre application et les chiffres semblent raisonnables. Edit: vous pouvez définir la date de début dans un ServletFilter pour obtenir la durée d'attente du client. Je vous ai donné le temps qu'il a fallu pour écrire la sortie au client.

+1

mais cela ne prend pas en compte le tampon socket ni la latence que l'OP mentionne :( –

+0

cela semble prometteur, je vais tenter le coup –

+0

juste essayé cela et cela n'a pas fonctionné. être écrit longtemps avant qu'ils quittent la machine physique. –

0

Découvrez Jiffy-web, développé par netflix pour leur donner une idée plus précise de la page totale -> le rendu des pages du temps

0

J'ai eu le même problème. Mais ce JavaOne Paper m'a vraiment aidé à résoudre ce problème. Je vous demanderais d'aller à travers et il utilise essentiellement javascript pour calculer l'heure.

Questions connexes