【发布时间】:2010-09-10 07:17:29
【问题描述】:
我如何衡量客户端等待请求的时间。
在服务器端很容易,例如通过过滤器。 但是如果我们要计算总时间,包括延迟和数据传输,那就很难了。
是否可以访问底层套接字以查看请求何时完成? 还是有必要做一些javascript技巧?也许通过浏览器和服务器之间的时钟同步?这个任务有没有预制的javascripts?
【问题讨论】:
标签: java tomcat servlets time sockets
我如何衡量客户端等待请求的时间。
在服务器端很容易,例如通过过滤器。 但是如果我们要计算总时间,包括延迟和数据传输,那就很难了。
是否可以访问底层套接字以查看请求何时完成? 还是有必要做一些javascript技巧?也许通过浏览器和服务器之间的时钟同步?这个任务有没有预制的javascripts?
【问题讨论】:
标签: java tomcat servlets time sockets
您可以设置一个 0 字节的套接字发送缓冲区(我并不完全推荐这样做),这样当您对 HttpResponse.send() 的阻塞调用时,您可以更清楚地了解最后一个字节何时离开,但旅行时间不包括在内。 Ekk--即使提到它,我都感到不安。您可以使用连接器特定设置在 Tomcat 中执行此操作。 (Tomcat 6 Connector documentation)
或者您可以提出某种 javascript 时间戳方法,但我不希望设置客户端时钟。必须多次调用 Web 服务器。
这种方法将涵盖延迟,尽管您仍然存在一些抖动差异。
嗯...有趣的问题。 :)
【讨论】:
如果您想从浏览器测量它以模拟任何客户端请求,您可以查看 firebug 中的 net 选项卡,了解下载每个页面需要多长时间以及下载顺序。
【讨论】:
您无法完全从服务器端知道客户端必须等待多长时间。你需要一些 JavaScript。
您不想同步客户端和服务器时钟,这太过分了。只需测量客户端发出请求与完成显示响应之间的时间。
如果客户端是 AJAX,这很容易:调用 new Date().getTime() 以获取请求发出时的毫秒时间,并将其与解析结果后的时间进行比较。然后在后台将此计时信息发送到服务器。
对于非 AJAX 应用程序,当用户单击请求时,使用 JavaScript 将当前时间戳(从客户端的角度)与查询一起发送到服务器,并将相同的时间戳传递回重新加载结果页面时的客户端。在该页面的 onLoad 处理程序中,测量总经过的时间,然后将其发送回服务器 - 使用 XmlHttpRequest 或为向服务器发出的下一个请求添加额外的参数。
【讨论】:
您可以包装 HttpServletResponse 对象和 HttpServletResponse 返回的 OutputStream。当输出开始写入时,您可以设置 startDate,当它停止(或刷新等)时,您可以设置 stopDate。
这可用于计算将所有数据流式传输回客户端所需的时间长度。
我们在我们的应用程序中使用它并且数字看起来很合理。
编辑:您可以在 ServletFilter 中设置开始日期以获取客户端等待的时间长度。我给了你写输出到客户端的时间长度。
【讨论】:
查看Jiffy-web,由 netflix 开发,让他们更准确地查看总页面 -> 页面呈现时间
【讨论】:
我遇到了同样的问题。但是这个JavaOne Paper真的帮我解决了这个问题。我会要求你通过它,它基本上使用 javascript 来计算时间。
【讨论】: