【发布时间】:2018-02-21 17:52:40
【问题描述】:
我调用 AJAX 来检查数据库,如果每 3 或 10 秒有一次新的通知,同时来自 4 个不同浏览器的相同查询。但是在循环 100+ 之后的某个时刻,服务器返回错误 508(检测到循环)。这只是一个简单的网站,所以我认为我不需要 VPS 服务器。
我在 SELECT 中添加了时间戳作为查询区分符,放置 unset、flush、mysqli_free_result、pause、mysqli_kill、mysqli_close,但仍然出现错误。进入流程达到 20/20。
脚本
var counter = 1;
var notiftimer;
$(document).ready(function() {
ajax_loadnotifs();
});
function ajax_loadnotifs() {
$.ajax({
type: "post",
url: "service.php",
dataType: "json",
data: { action:'loadnotifs' },
success: function(data, textStatus, jqXHR){
$("div").append($("<p>").text(counter++ + ": succeeded"));
notiftimer = setTimeout(function() {
ajax_loadnotifs();
}, 3000);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR.responseText);
}
});
}
service.php
$link = mysqli_connect('localhost', 'root', 'root', 'testdb');
$notifs = array();
$query = "SELECT id, message FROM notifs LIMIT 20";
if (!$temp_notifs = mysqli_query($link, $query)) {
die(json_encode(array("errmsg" => "Selecting notifs.")));
}
while($notif = mysqli_fetch_assoc($temp_notifs)) {
$notifs[] = $notif;
}
mysqli_close($link);
echo json_encode($notifs);
cPanel - 资源使用概览
当 Entry Processes 达到 20/20 时,我收到错误 508。如何维护低服务器 Entry Processes? (用 4 种不同的浏览器测试,在共享主机上运行它们直到循环 100+。在本地计算机上没有问题)
【问题讨论】:
-
如果您可以添加更多代码,它将帮助我们弄清楚发生了什么。从表面上看,每三分钟点击脚本四次应该不会超出您的输入过程限制。
-
@Jeaf Gilbert,发生这种情况时请在浏览器中打开网络选项卡,并向我们显示此类失败请求的响应标头。然后我们将看到究竟是哪个程序返回了这个错误。它可以是 Web 服务器、php 或一些代理。
-
@i-man 更新了,请看一下。
-
notifs 表有多少条记录?
-
服务器上还有其他东西吗,例如 wordpress 实例?你有 ssh 访问服务器的权限吗?
标签: php ajax hosting shared-hosting