我正在努力了解投票工作的时间。我已经阅读了很多教程,发现大多数教程都使用jQuery。对我来说使用jQuery很不错,因为它让事情变得更容易。但要谈谈学习javascript基础知识。使用jQuery不是我思考的首选。
我做了自己的lomg民意调查并对此有所疑问。
在javascript中(我不会有完整的脚本,因为我猜人们非常理解它)
function callme() {
var tmstmp= new Date().getTime(); // sending time stamp now to php
var url="test2.php?user_id=298&tmstmp="+tmstmp;
var params="user_id=298&tmstmp="+tmstmp;
xmlHttp=GetXmlHttpObject()
xmlHttp.onreadystatechange=function () {
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
if (xmlHttp.responseText!=""){
document.getElementById("result").innerHTML=xmlHttp.responseText;
}
setTimeout("callme()",1000);
}
}
在PHP中
$user_id=$_POST['user_id'];
$tmstmp=$_POST['tmstmp'];
$params=$_POST['params'];
$stmt = $conn->prepare('SELECT * FROM user where recipient=:recipient ORDER BY cr_id desc');
$stmt->bindParam(':recipient', $user_id);
$r=$stmt->fetch();
$currentmodif=$r['database_timestamp'];
if ($currentmodif <= $tmstmp) { ///**HERE IS THE QUESTION !!
sleep(1);
clearstatcache();
$currentmodif =$r['database_timestamp'];
}
echo $r['message'].'-->'.$tmstmp;
我的问题是:
实际上是在php
- 如果($ currentmodif&lt; = $ tmstmp)必须虽然($ currentmodif&lt; = $ tmstmp)
根据我发现的教程。但是如果我使用而则不起作用 直到我将其更改为(&gt; )为什么?
- 如果我继续使用 if 而不是使用而是不对的?
您对我制作的这个剧本有什么建议吗?
过了一会儿(我们说几分钟),我收到消息服务无法使用bla bla bla
我真的很想知道另一个人如何做长期民意调查没有问题,例如facebook或其他聊天彗星。
Thank you for any answer.
答案 0 :(得分:1)
编辑:
基本上我的答案是从长轮询切换到短轮询。这对我来说是错误的。我是一个糟糕的回答者。
澄清生活在这里,以及一些利弊,可能是你的错误的原因:
Scaling a chat app - short polling vs. long polling (AJAX, PHP)
原文:
乍一看:我认为您遇到的问题是您每秒都在轮询,但要告诉服务器暂停一下。如果您将if
更改为while
,那么您将告诉它无限期地睡眠,直到对数据库进行了更改并更新了$currentmodif
。您要做的是将响应发送回js,而不是等待响应之前进行更改。
改为尝试这个逻辑:
setInterval
而不是递归setTimeout
,并保留对该时间间隔的引用,以便稍后clearInterval
可以停止轮询。