我用短轮询(AJAX 刷新)制作了一个简单的 PHP jQuery 聊天应用程序。就像,每 2 - 3 秒它会询问新消息。但是,我读到长轮询对于聊天应用程序来说是一种更好的方法。所以,我浏览了一些长轮询脚本。我做了这样的:
Javascript:
$("#submit").click(function(){
$.ajax({
url: 'chat-handler.php',
dataType: 'json',
data: {action : 'read', message : 'message'}
});
});
var getNewMessage = function() {
$.ajax({
url: 'chat-handler.php',
dataType: 'json',
data: {action : 'read', message : 'message'},
function(data){
alert(data);
}
});
getNewMessage();
}
$(document).ready(getNewMessage);
PHP
<?php
$time = time();
while ((time() - $time) < 25) {
$data = $db->getNewMessage ();
if (!empty ($data)) {
echo json_encode ($data);
break;
}
usleep(1000000); // 1 Second
}
?>
问题是,一旦getNewMessage()
启动,它就会执行,除非它得到一些响应(来自 chat-handler.php)。它递归执行。但是,如果有人想在两者之间发送消息,那么实际上该函数($("#submit").click())
永远不会像getNewMessage()
仍在执行中那样执行。那么有什么解决方法吗?