我对我服务器上的PHP脚本发出AJAX POST请求。该脚本反过来向外部服务器上的php脚本发出GET请求,以检查文本文件的内容。但是,返回结果需要很长时间。为什么会这样?
AJAX在我的服务器上发布脚本请求
session_start();
$fileName = $_POST['textFile'];
$result = file_get_contents($_SESSION['serverURL']."fileReader.php?textFile=$fileName");
echo $result;
GET请求不同服务器上的脚本
$fileName = $_GET['textFile'];
if (file_exists('text/'.$fileName.'.txt')) {
$lines = file('text/'.$fileName.'.txt');
echo $lines[sizeof($lines)-1];
}
else{
echo 0;
}
这些是非常简单的脚本,它只检查一个非常小的文本文件,为什么需要这么长时间呢?
我正在我的网站上发出其他AJAX请求,但这些肯定不会导致问题。话虽如此,该文本文件的返回值总是伴随着另一个AJAX请求的完成,该请求启动了在我的服务器上完成需要一段时间的脚本,但这些会如何相互影响?!他们不应该对吗?
答案 0 :(得分:1)
网络延迟和CPU过载可能是延迟的最大因素。
每次打开新连接时,都会有打开连接的开销,以及降低的传输速率(而不是直接读取文件)。
另外关于你的“其他”AJAX请求需要一段时间才能完成......这实际上可能会影响系统上的其他所有内容。如果需要很长时间才能完成,可以说它占用了大量CPU或磁盘带宽。像这样的任何密集过程都会影响系统上的其他所有过程。特别是如果您使用相同的文件或数据库表,那么您可以在此时颠倒您的文件系统或数据库。
如果没有看到问题就很难说出问题是什么,你应该为系统的每个部分计时,并在请求期间监控CPU和内存负载。试着找出瓶颈所在。
答案 1 :(得分:1)
您不必通过HTTP获取路由来获取文件的最后一行。为什么不留在文件系统中并使用类似的函数来检索最后一行:
function fileGetLine($filename, $line) {
if (!is_file($filename) || !is_readable($filename)) {
// invalid file name or not readable
return false;
}
if (!is_int($line)) {
// invalid line number
return false;
}
$lines = file($filename);
$lineCount = count($lines);
if ($line < 0) {
// negative line number, count from end
$line = $lineCount + $line;
}
if ($line < 0 || $line >= $lineCount) {
// line number out of bounds
return false;
}
return $lines[$line];
}
session_start();
echo fileGetLine('text/'.basename($_POST['textFile']).'.txt', -1);
答案 2 :(得分:0)
检查服务器上的DNS设置。在我们的服务器上,我们意外地将IP地址作为主DNS服务器。在发出HTTP请求时(使用file_get_contents
,curl
或wget
),有5秒的延迟。服务器试图到达第一个DNS服务器并失败,然后改为使用第二个配置的DNS服务器。
在我的情况下,由于我的脚本连续多次发出HTTP请求,因此这5秒变为了整整30-40秒。