测量来自Servlet的总网络传输时间

时间:2020-03-05 18:59:35  来源:igfitidea点击:

我如何测量客户端必须等待多长时间。

在服务器端,这很容易,例如通过过滤器。
但是,如果我们要考虑包括延迟和数据传输在内的总时间,那就很难了。

是否可以访问基础套接字以查看请求何时完成?
还是有必要做一些JavaScript技巧?也许通过浏览器和服务器之间的时钟同步?是否有用于此任务的预制javascript?

解决方案

回答

我们可以设置一个0字节的套接字发送缓冲区(我不完全建议这样做),这样当我们对HttpResponse.send()进行阻塞调用时,我们可以更清楚地知道何时剩下最后一个字节,但不包括传输时间。埃克-我什至提起它都感到不安。我们可以在Tomcat中使用特定于连接器的设置来执行此操作。 (Tomcat 6连接器文档)

或者,我们可以提出某种JavaScript时间戳方法,但是我不希望设置客户端时钟。必须多次调用Web服务器。

  • 时间戳查询
  • 真正的要求
  • 报告数据

尽管我们仍然有一些抖动差异,但是这种方法可以解决延迟问题。

嗯...你那里有趣的问题。 :)

回答

如果要通过浏览器测量它以模拟任何客户端请求,则可以在firebug中查看net选项卡,以查看下载页面的每一页需要多长时间以及下载顺序。

回答

我们无法知道客户端仅从服务器端等待多长时间。我们将需要一些JavaScript。

我们不想同步客户端和服务器时钟,这太过分了。只需测量客户端发出请求与完成显示响应之间的时间即可。

如果客户端是AJAX,这可能非常简单:调用new Date()。getTime()以获取发出请求时的时间(以毫秒为单位),并将其与解析结果后的时间进行比较。然后将此计时信息发送到后台服务器。

对于非AJAX应用程序,当用户单击请求时,请使用JavaScript将当前时间戳(从客户端的角度来看)与查询一起发送到服务器,并在请求时将相同的时间戳传递回客户端结果页面被重新加载。在该页面的onLoad处理程序中,测量经过的总时间,然后使用XmlHttpRequest或者将一个额外的参数添加到对服务器的下一个请求上,将其发送回服务器。

回答

我们可以包装HttpServletResponse对象和HttpServletResponse返回的OutputStream。当输出开始写入时,我们可以设置一个startDate,当它停止时(或者刷新时等),我们可以设置一个stopDate。

这可用于计算将所有数据流回客户端所花费的时间。

我们正在应用程序中使用它,并且数字看起来很合理。

编辑:我们可以在ServletFilter中设置开始日期,以获取客户端等待的时间长度。我给了我们将输出写入客户端所需的时间。

回答

查看由netflix开发的Jiffy-web,以便为他们提供更准确的总页面视图->页面呈现时间

回答

我有同样的问题。但是这个JavaOne Paper确实帮助我解决了这个问题。我会要求我们检查一下,它基本上使用javascript来计算时间。