Domanda

Come posso misurare quanto tempo un cliente deve attendere per una richiesta.

Lato server è semplice, ad esempio tramite un filtro.Ma se vogliamo tenere conto del tempo totale inclusa la latenza e il trasferimento dei dati, diventa difficile.

è possibile accedere al socket sottostante per vedere quando la richiesta è terminata?o è necessario eseguire alcuni trucchi Javascript?forse attraverso la sincronizzazione dell'orologio tra browser e server?ci sono javascript predefiniti per questa attività?

È stato utile?

Soluzione

Non è possibile sapere quanto tempo il client ha dovuto attendere esclusivamente dal lato server.Avrai bisogno di JavaScript.

Non vuoi sincronizzare gli orologi del client e del server, sarebbe eccessivo.Basta misurare il tempo che intercorre tra il momento in cui il client effettua la richiesta e il momento in cui termina di visualizzare la sua risposta.

Se il client è AJAX, questo può essere abbastanza semplice:chiamare new Date().getTime() per ottenere l'ora in millisecondi quando viene effettuata la richiesta e confrontarla con l'ora successiva all'analisi del risultato.Quindi invia queste informazioni sui tempi al server in background.

Per un'applicazione non AJAX, quando l'utente fa clic su una richiesta, utilizzare JavaScript per inviare il timestamp corrente (dal punto di vista del client) al server insieme alla query e passare lo stesso timestamp al client quando il la pagina risultante viene ricaricata.Nel gestore onLoad di quella pagina, misura il tempo totale trascorso e quindi invialo al server, utilizzando un XmlHttpRequest o aggiungendo un argomento aggiuntivo alla richiesta successiva effettuata al server.

Altri suggerimenti

Se vuoi misurarlo dal tuo browser per simulare qualsiasi richiesta del client, puoi guardare la scheda Net in Firebug per vedere quanto tempo impiega ogni parte della pagina per essere scaricata e l'ordine di download.

Potresti racchiudere l'oggetto HttpServletResponse e l'OutputStream restituito da HttpServletResponse.Quando l'output inizia a scrivere puoi impostare un startDate e quando si ferma (o quando viene scaricato, ecc.) puoi impostare un stopDate.

Questo può essere utilizzato per calcolare il tempo necessario per trasmettere tutti i dati al client.

Lo stiamo utilizzando nella nostra applicazione e i numeri sembrano ragionevoli.

modificare:è possibile impostare la data di inizio in un ServletFilter per ottenere il periodo di tempo di attesa del client.Ti ho dato il tempo necessario per scrivere l'output sul client.

Potresti impostare un buffer di invio socket da 0 byte (e non lo consiglio esattamente) in modo che quando blocchi la chiamata a HttpResponse.send() hai un'idea più precisa di quando è rimasto l'ultimo byte, ma il tempo di viaggio non è incluso . Ecc--Mi sento nauseato anche solo a menzionarlo.Puoi farlo in Tomcat con impostazioni specifiche del connettore.(Documentazione del connettore Tomcat 6)

Oppure potresti trovare una sorta di approccio timestamp javascript, ma non mi aspetterei di impostare l'orologio del client.Dovrebbero essere effettuate più chiamate al server web.

  • query di marcatura temporale
  • la vera richiesta
  • riportando i dati

E questo approccio coprirebbe la latenza, anche se hai ancora qualche variazione di jitter.

Hmmm... interessante problema che hai lì.:)

Guardare Jiffy-web, sviluppato da Netflix per fornire una visione più accurata della pagina totale -> tempo di rendering della pagina

Ho avuto lo stesso problema.Ma questo Carta JavaOne mi ha davvero aiutato a risolvere questo problema.Ti chiederei di esaminarlo e fondamentalmente utilizza JavaScript per calcolare il tempo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top