3

我有一个自定义 IHttpModule 用于记录所有 HTTP 请求和响应,目前运行良好,但我很想扩展它,以便确定响应实际需要多长时间。

响应记录在 HttpApplication.EndRequest 事件中,但此事件在请求实际发送到 Web 客户端之前触发。虽然这可以让我确定服务器处理响应所需的时间,但我也希望能够计算客户端实际接收响应所需的时间。

是否有事件或其他机制允许我在客户端完成接收响应后进行拦截?

4

3 回答 3

1

所以这需要客户端代码。但并不完全清楚你想要测量什么。从最小到最大,时间可能是

  1. 服务器应用程序内的时间 - 由您已经拥有的代码测量。
    • 您的代码可以在开始时从“Now()”或使用 HTTP 对象设置开始。对站点的第一次调用会发现这些开始时间之间存在很大差异,否则它们应该几乎相同。
  2. 服务器网站上的时间 - 我相信大多数托管服务(如 IIS)已经衡量了这一点。
  3. 服务器机器 - 我相信这就是“mo”所指的。您必须在服务器机器上进行某种外部监控,比如 WireShark。
  4. 客户端机器 - 同样,您必须在客户端机器上进行某种外部监控。这将是最难获得的,但我认为这确实是您所要求的。
  5. 客户端应用程序 - 这是您可以使用 javascript 衡量的内容。

除非这是“第一次调用”(请参阅​​ASP.NET 站点上的首页加载缓慢IIS7 上的 ASP.NET 应用程序 - iisreset 后启动速度非常慢),我相信所有这些时间都将如此接近以至于您可以使用取而代之的是“足够好”的方法。

如果您必须测量此调用的客户端时间,那么您将陷入困境。但是,如果您只是想要更好的数字,只需继续用已有的数据衡量 1.(应用程序时间),并确保同时衡量请求和响应的大小。

然后通过在各种目标客户端机器上进行测试来设置调整该时间的基线。

  • 测量从客户端到服务器的 ping 时间
  • 测量中等大小内容的传输时间 - 上传和下载
  • Finagle的数字得到你的平均调整

您最终应该得到如下公式:

[AdjustedTime] = [PingTime] + [ServerTime]
+ ([UploadSpeed] * [RequestSize])
+ ([DownloadSpeed] * [ResponseSize]);

这将是预期的客户端响应时间。

于 2013-05-21T21:35:36.513 回答
0

另一种方法可能是将(例如:windows 服务将响应时间写入数据库)连接到您的网络服务器(IIS)并跟踪这些事件。如果您想分析时间,客户端需要获取您的内容。

但我认为,iis 已经能够做到这一点。

这取决于一点点,你想做什么。

于 2012-03-11T19:46:33.207 回答
0

是的,你可以处理HttpApplication.EndRequest

于 2012-03-11T15:35:50.280 回答