gpt4 book ai didi

javascript - setInterval 的替代方案以查看文件是否已被修改?

转载 作者:行者123 更新时间:2023-11-30 17:44:47 25 4
gpt4 key购买 nike

我正在尝试查看服务器上的文件是否已被修改。目前,我每秒检查一次 setInterval。它使用 AJAX 调用 PHP 脚本,该脚本根据 JS 认为应该的长度检查文件长度。我的问题是,有没有更好/更有效的方法来做到这一点?

(我正在使用 mutationObserver 做其他事情,这让我想知道是否有其他类似的东西可以帮助解决这个问题......)

JS:

function checkFile() {
var fReader = new XMLHttpRequest();
var params = "MODE=CHECK&File=Data.txt";

fReader.open("POST","File.php",false);

fReader.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
fReader.setRequestHeader("Content-length", params.length);
fReader.setRequestHeader("Connection", "close");

fReader.send(params);

return JSON.parse(fReader.responseText).CHECK > myLength;
}

PHP:

switch($MODE) {

case('CHECK'):
if(file_exists($_POST['File'])){
$return['CHECK'] = count(file($_POST['File']));
}
break;
case('GET'):

$lines = file($_POST['File']);
$length=$_POST['LEN'];#This is the number of lines JS has.

$count = count($lines);

if ($length < $count) {
$return['GET'] = array_slice($lines,$length);
} else {
#return all lines.
$return['GET'] = $lines;
}
break;

...

}
echo json_encode($return);

我唯一的其他想法是让 AJAX 异步检查文件并将响应拆分到一个单独的函数。 JS 将发送文件计数(在参数中),PHP 将根据计数进行检查。如果不同,则返回差异,否则返回类似 null 或“无变化”的内容。目前,我正在检查上面的文件。如果更改了,我会再次使用 GET 模式进行 AJAX 以实际获取更改...

想法?完全不同的方法?我对非常规方法持开放态度。 (我选择的浏览器是 Chrome,我已经在使用扩展程序,所以我也可以在那里做一些事情...)。

谢谢,戴夫

最佳答案

您正在使用的称为轮询。您反复询问服务器是否发生了变化。更好的解决方案是长轮询。您询问服务器一次,服务器仅在发生变化时返回。更好的解决方案可能是网络套接字。现在您应该关注长轮询解决方案。

关于长轮询:

诀窍在于服务器的实现,它在文件更改之前不会返回。为了让您的服务器决定文件是否已更改,您也可以在 while 循环中使用轮询,但优点是没有网络流量。可能还有其他方法可以使用 PHP 获取文件的状态,至少您将问题从检查远程文件的状态转变为在本地检查它。

关于javascript - setInterval 的替代方案以查看文件是否已被修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20352822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com