2

有没有办法从 HTTP 服务器获取有关 HTTP 请求持续时间的可靠信息?

感兴趣的场景:

使用 POST 方法针对 PHP 脚本发送带有数据负载的 AJAX 请求:

//dispatch ajax request
$.ajax({
  type: "POST",
  url: "timing.php",
  data: {
         "payload":"some long string or something",
         "currentTime": +new Date() //miliseconds on client
        },
  success: function(response) { console.log(response) },
  error: function() { console.log('something went banana...') },
  dataType: "text"
});

PHP 脚本“timing.php”可能会这样说:

<?php
//in the meanwhile, on a quiet server...
$currentTime = microtime(true); //microseconds on server
//send headers as necessary, and then, the payload
echo $currentTime * 1000 - $_POST["currentTime"];
?>

我想知道的是从请求到达 http 服务器到服务器调用 PHP 脚本之间经过了多长时间。处理(加载)POST 请求的输入参数需要多长时间。不是从 Javascript currentTime 到 PHP $currentTime 所花费的时间,而是 Apache 从 AJAX 请求加载“有效负载”(和“currentTime”)所花费的时间。应该在服务器端收集时间。

下落:

  • 客户端和服务器在同一个时区(而且,客户端没有对它的时间设置做任何令人兴奋的事情),
  • 服务器具有默认配置和模块的 PHP5/Apache2,
  • 所需的时间分辨率为毫秒
4

1 回答 1

0

事实证明,在 PHP 环境中获得一些可靠信息的最佳选择是 $_SERVER['REQUEST_TIME_FLOAT'] 变量,自 PHP 5.4.0 起可用。这将忽略启动实际模块(HTTP 服务器)所需的一些时间,但应该相当准确。所需的时间是:

$time_microseconds = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];.

或者,Apache2 也可以这样做,只要将 %D 添加到 mod_log_config 模块的日志条目中:

"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %D".
于 2015-08-03T05:10:36.623 回答