2

我有一个 PHP 脚本,当被调用时,它会做一些事情,然后休眠 3 秒,然后回显它的结果。

然后我有这个页面,它每秒调用上面的脚本(带有 Ajax 请求)1/10。当我得到响应时,我在 div 元素中写了一个数字。

问题是,onreadystatechange 处理程序每​​ 3 秒触发一次,并一起写入 30 个数字。是否有任何其他替代方案可以sleep()像我需要的那样表现?

以下是被请求页面的代码片段:

ignore_user_abort(true);
$time=microtime(true)*10000;
changemystatus(1, $time); //this writes to a database
sleep(3);
if ($time>=getmytime()){ //getmytime() reads the data previously written by changemystatus()
    setstatus(0); // still writing to that DB
    echo("1");
}else echo ("0");

基本上,如果用户不再发送请求(因为他走了,或者他的连接中断,或者他禁用了 JS 或其他什么),我希望数据库中的“状态”字段更改为 0,以便其他玩家可能知道他是现在“离线”。

4

2 回答 2

0

新答案:如果您想检测用户是否仍处于活动状态,请记录他们上次与服务器通信的时间戳。

然后定义一些截止点,比如:5 分钟。

if ($last_active < (time() - 5 * 60)) {
    // user is inactive
}
于 2013-06-21T16:34:57.050 回答
0

您可以在JavaScript中使用setTimeout.

前任:

setTimeout(function () {
    console.log("3 seconds have passed");
}, 3000);

这不会阻止 JavaScript 或浏览器,因为setTimeout它是异步的。它将安排一个事件在执行该函数的 3 秒(3000 毫秒)后触发。

于 2013-06-21T16:16:18.753 回答