问题描述
我已经广泛搜索了一个可行的答案,尽管关于这个问题的问题不乏问题,但还没有找到。
我有一个 PHP 脚本,它检查数据库是否有由 setTimeout 的 ajax 调用发起的更新。该页面就像一个游戏大厅,用户可以在其中创建、加入或离开游戏。当他们这样做时,侦听 ajax 函数在更新发生时中止,然后立即恢复。当我以单独用户的身份对其进行测试时,这非常有效,没有延迟或延迟,但是一旦另一个用户在页面上,PHP 脚本似乎挂断并且不想退出循环,前面没有任何事情发生直到超时。
我添加了 session_write_close、ob_flush 和flush(),在有和没有 session_start 的情况下都尝试过,但都无济于事。我确信 websockets 更适合,但它们目前不是一种选择。
AJAX
var hear,checking;
function listen(){
hear = $.ajax({
url: "check.PHP?last=0",success: function(data){
//do some stuff
checking = setTimeout({listen()},3000);
}
})
}
//Now WHEN USER CLICKS JOIN FOR EXAMPLE-
clearTimeout(checking);
hear.abort();
//Perform a different ajax call to update db,then resume listen()
CHECK.PHP
require_once("../abc/connection.PHP"); // connect to db
//*******START OF VARIoUS TRIED SETTINGS
session_start();
$id = $_SESSION['id'];
session_write_close();
ignore_user_abort(1);
set_time_limit(40);
ini_set('zlib.output_compression',0);
ini_set('implicit_flush',1);
//*********END OF VARIoUS TRIED SETTINGS
$last = isset($_GET['last']) ? MysqLi_real_escape_string($_GET['last']) : 0 ;
$true = 0;
while($true < 10){
$true++;
$str = " "; //tried this line and below to help force script ackNowledgement of ajax abortion
echo $str;
if(connection_status() != CONNECTION_norMAL){
echo str_repeat($str,1024); // In case of minimum output requirement 1KB
ob_flush();
flush();
break;
}
$sql = MysqLi_query($con,"SELECT * FROM games WHERE id > $last");
if(MysqLi_num_rows($sql) > 0){
echo "Change detected";
break;
}else{
MysqLi_free_result($sql);
sleep(3);
}
}
此时我几乎准备恢复到每 3 秒进行一次 ajax 调用。非常感谢任何帮助。谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)