我每隔5秒调用一个AJAX,以更新当前登录用户的一些信息到PHP数据库表中。
但它在我的网站上造成了沉重的负担,当我的网站上有多个用户登录时,网站会在一段时间后关闭。
是否有任何方法可以使用彗星或Push等其他技术来改进我的脚本?
下面是我正在使用的代码:
Javascript代码:
jQuery(document).ready(function ($) {
update_data();
function update_data() {
$.ajax({
type: "POST",
url: "$URL",
data: {update_current_time:1},
success: function(response){
setTimeout(update_data, 5000);
},
error: function(){
setTimeout(update_data, 5000);
}
});
}
});PHP代码:
if(isset($_POST['update_current_time']))
{
$query = "UPDATE users SET user_timer=now() WHERE user_id=".$_SESSION['id'];
$db->execute();
echo 'success';
die;
}发布于 2015-08-05 10:51:51
要使用push或comet,您将需要设置一个"webserver“,它将侦听某个端口。因此,这不能使用纯php解决,而是需要一个侦听器设置(除非您使用php创建侦听服务器)。
要停留在php中,您可以查看棘轮。
另一个常见的方法是将node.js服务器并行到您的way服务器。
发布于 2015-08-05 11:15:54
如果我遇到这个用例,我的实现将使用会话变量。与其每5秒写入数据库,不如将请求时间戳存储在$_SESSION中大约1-2分钟,然后一次性写入整个数据。对于这个例子,让我们考虑一下您希望将其设置为一分钟(60秒)。
所以算法是
$_SESSION['requestcount']。status 200 OK。$_SESSION['requestcount']的值是否为12 (每5秒1次请求x12)。$_SESSION['requestcount']的值小于12,则将其值增加1并返回status 200 OK。$_SESSION['requestcount']的值等于或大于12,那么我将从子数组中获取所有数据,并准备将其插入到数据库中,并将$_SESSION['requestcount']重置为0,如果$_SESSION['requestcount']很好地返回status 200 OK。https://stackoverflow.com/questions/31830340
复制相似问题