setInterval(function{
//send ajax request and update chat window
}, 1000)
有没有更好的方法来用新消息更新聊天?这是使用 setInterval 更新聊天的正确方法吗?
setInterval(function{
//send ajax request and update chat window
}, 1000)
有没有更好的方法来用新消息更新聊天?这是使用 setInterval 更新聊天的正确方法吗?
有两种主要选择(或更多说的流行方式)
拉
首先是拉动,这就是你正在做的事情。每 x (milli) 秒检查一次服务器配置是否已更改。
这是html4方式(不包括flash等,所以只有html/js)。对于 php 而言,这不是最好的方法,因为您为单用户每分钟建立大量连接(在您的示例代码中,每秒至少 60 个连接)。
也建议在响应之前等待,然后等待。例如,如果您每 1 秒请求一次更新,但您的响应需要 2 秒,那么您就是在敲击您的服务器。有关更多信息,请参阅tymeJV 答案
推动
接下来是推。这更像是 HTML5 方式。这是由 websockets 实现的。令人高兴的是客户端正在“列出”连接并等待更新。当它更新时,它会触发一个事件。
这在 PHP 中实现并不好,因为您需要一个持续的连接,并且您的服务器将很快溢出,因为 PHP 无法将连接推送到后台(如果我正确的话,Java 可以)。
我个人制作了一个小型聊天应用程序并使用了pusher。它完美地工作。我只使用免费版本,所以不知道它有多贵。
几乎是的,一个小的调整,而不是在间隔内封装 AJAX 调用(如果服务器上出现问题,这可能会导致未返回的请求池化),您应该setTimeout
在 AJAX 回调中抛出一个以创建递归调用。考虑:
function callAjax() {
$.ajax(options).done(function() {
//do your response
setTimeout(callAjax, 2000);
});
}
callAjax();